From a5fc43824a1bd1282bcd91732156e8c25d0b8d14 Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Tue, 17 Sep 2019 16:20:27 -0300 Subject: [PATCH 01/15] Update tests and packages. --- .babelrc | 2 +- __mocks__/fileMock.js | 1 + config/jest/cssTransform.js | 12 + config/jest/fileTransformer.js | 10 + index.js | 2 +- jest.config.js | 26 + lib/__tests__/watermark-test.js | 26 +- lib/blob/__tests__/blob-test.js | 6 +- lib/canvas/__tests__/pool-test.js | 2 +- lib/image/__tests__/image-test.js | 7 +- lib/setup.js | 21 + package-lock.json | 12180 ++++++++++++++++++++++++++++ package.json | 43 +- webpack.config.js | 5 +- 14 files changed, 12296 insertions(+), 47 deletions(-) create mode 100644 __mocks__/fileMock.js create mode 100644 config/jest/cssTransform.js create mode 100644 config/jest/fileTransformer.js create mode 100644 jest.config.js create mode 100644 lib/setup.js create mode 100644 package-lock.json diff --git a/.babelrc b/.babelrc index c13c5f6..1320b9a 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,3 @@ { - "presets": ["es2015"] + "presets": ["@babel/preset-env"] } diff --git a/__mocks__/fileMock.js b/__mocks__/fileMock.js new file mode 100644 index 0000000..86059f3 --- /dev/null +++ b/__mocks__/fileMock.js @@ -0,0 +1 @@ +module.exports = 'test-file-stub'; diff --git a/config/jest/cssTransform.js b/config/jest/cssTransform.js new file mode 100644 index 0000000..5674669 --- /dev/null +++ b/config/jest/cssTransform.js @@ -0,0 +1,12 @@ +// This is a custom Jest transformer turning style imports into empty objects. +// http://facebook.github.io/jest/docs/tutorial-webpack.html + +module.exports = { + process() { + return 'module.exports = {};'; + }, + getCacheKey() { + // The output is always the same. + return 'cssTransform'; + }, +}; diff --git a/config/jest/fileTransformer.js b/config/jest/fileTransformer.js new file mode 100644 index 0000000..3166508 --- /dev/null +++ b/config/jest/fileTransformer.js @@ -0,0 +1,10 @@ +const path = require('path'); + +// This is a custom Jest transformer turning file imports into filenames. +// http://facebook.github.io/jest/docs/tutorial-webpack.html + +module.exports = { + process(src, filename) { + return `module.exports = ${JSON.stringify(path.basename(filename))};`; + }, +}; diff --git a/index.js b/index.js index e6f1ddc..e85a368 100644 --- a/index.js +++ b/index.js @@ -1,2 +1,2 @@ -require('babel-register'); +require('@babel/register'); module.exports = require('./lib/index').default; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..a6a5449 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,26 @@ +module.exports = { + name: 'Jazida Testes Unitários/Integração', + notify: true, + verbose: true, + testEnvironment: 'node', + testURL: 'http://localhost:3000/', + setupFiles: ['/lib/setup.js'], + testMatch: [ + '/**/__tests__/**/*-(spec|test).js?(x)', + '/**/?(*.)(spec|test).js?(x)', + ], + collectCoverageFrom: ['/**/*.{js,jsx}'], + transformIgnorePatterns: ['[/\\\\]node_modules[/\\\\].+\\.(js|jsx)$'], + modulePathIgnorePatterns: ['/node_modules'], + moduleNameMapper: { + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': + '/__mocks__/fileMock.js', + '\\.(css|sass)$': 'identity-obj-proxy', + }, + transform: { + '^.+\\.js$': 'babel-jest', + '^.+\\.css$': '/config/jest/cssTransform.js', + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': + '/config/jest/fileTransformer.js', + }, +}; diff --git a/lib/__tests__/watermark-test.js b/lib/__tests__/watermark-test.js index a67b98f..b6fdcaf 100644 --- a/lib/__tests__/watermark-test.js +++ b/lib/__tests__/watermark-test.js @@ -1,19 +1,19 @@ import watermark from '../'; const blob = require('../blob'); -blob.blob = jest.genMockFn(); +blob.blob = jest.fn() const canvas = require('../canvas'); -canvas.dataUrl = jest.genMockFn(); +canvas.dataUrl = jest.fn() const image = require('../image'); -image.load = jest.genMockFn(); -image.mapToCanvas = jest.genMockFn(); -image.imageToCanvas = jest.genMockFn(); -image.createImage = jest.genMockFn(); +image.load = jest.fn() +image.mapToCanvas = jest.fn() +image.imageToCanvas = jest.fn() +image.createImage = jest.fn() const style = require('../style'); -style.result = jest.genMockFn(); +style.result = jest.fn() describe('watermark', function () { @@ -29,7 +29,7 @@ describe('watermark', function () { }); it('can load urls and files', function () { - const urls = ['url1', new File()]; + const urls = ['url1', new File(["foo"], "foo.txt")]; const init = () => console.log(initialized); watermark(urls, { @@ -41,7 +41,7 @@ describe('watermark', function () { describe('.dataUrl()', function () { it('returns a new object structure', function () { - const draw = jest.genMockFunction(); + const draw = jest.fn(); const first = watermark(['url1', 'url2'], {}, promise); first.then = () => first; const second = first.dataUrl(draw); @@ -53,9 +53,9 @@ describe('watermark', function () { describe('.blob()', function () { it('should delegate to the dataUrl function and map to a blob', function () { const mark = watermark(['url1', 'url1'], {}, promise); - mark.dataUrl = jest.genMockFunction(); + mark.dataUrl = jest.fn(); mark.dataUrl.mockReturnValueOnce(promise); - const draw = jest.genMockFunction(); + const draw = jest.fn(); const newMark = mark.blob(draw); @@ -68,9 +68,9 @@ describe('watermark', function () { describe('.image()', function () { it('should delegate to the dataUrl function and map to an image', function () { const mark = watermark(['url1', 'url1'], {}, promise); - mark.dataUrl = jest.genMockFunction(); + mark.dataUrl = jest.fn(); mark.dataUrl.mockReturnValueOnce(promise); - const draw = jest.genMockFunction(); + const draw = jest.fn(); const newMark = mark.image(draw); diff --git a/lib/blob/__tests__/blob-test.js b/lib/blob/__tests__/blob-test.js index cead70f..23f6077 100644 --- a/lib/blob/__tests__/blob-test.js +++ b/lib/blob/__tests__/blob-test.js @@ -1,6 +1,6 @@ import {split, decode, uint8} from '../'; -const testUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAgAElEQ…z4wYdQblhRRGYSxWfKk909djpT+VOeAue/QVI/7VHKn/3/ANXZ6cTaQP0eAAAAAElFTkSuQmCC'; +const testUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII='; describe('blobs', function () { it('can break a data url into parts', function () { @@ -12,11 +12,13 @@ describe('blobs', function () { it('can decode base64 content', function () { const parts = split(testUrl); const decoded = decode(parts[1]); + console.log('parts', parts) expect(decoded).toEqual(atob(parts[1])); }); it('can convert raw data to a Uint8Array', function () { - const decoded = decode('hello'); + const encoded = window.btoa('hello'); + const decoded = decode(encoded); const ints = uint8(decoded); expect(ints[0]).toEqual(decoded.charCodeAt(0)); }); diff --git a/lib/canvas/__tests__/pool-test.js b/lib/canvas/__tests__/pool-test.js index 8bfb71c..e72d92e 100644 --- a/lib/canvas/__tests__/pool-test.js +++ b/lib/canvas/__tests__/pool-test.js @@ -8,7 +8,7 @@ import { CanvasPool } from '../pool'; */ const releasable = canvas => { const context = { - clearRect: jest.genMockFn() + clearRect: jest.fn() }; canvas.getContext = twoD => { canvas.context = context; diff --git a/lib/image/__tests__/image-test.js b/lib/image/__tests__/image-test.js index fd5c666..39b1f51 100644 --- a/lib/image/__tests__/image-test.js +++ b/lib/image/__tests__/image-test.js @@ -1,10 +1,11 @@ import {createImage, getLoader} from '../'; +const baseURL = 'http://localhost:3000/'; + describe('image', function () { it('can create a new image', function () { - const onload = () => console.log('loaded'); - const img = createImage('url1', onload); - expect(img.src).toBe('url1'); + const img = createImage(`${baseURL}url1`, onload); + expect(img.src).toBe(`${baseURL}url1`); expect(img.onload).toBe(onload); }); diff --git a/lib/setup.js b/lib/setup.js new file mode 100644 index 0000000..15db9a0 --- /dev/null +++ b/lib/setup.js @@ -0,0 +1,21 @@ +import { JSDOM } from 'jsdom'; + +const jsdom = new JSDOM(''); +const { window } = jsdom; + +function copyProps(src, target) { + const props = Object.getOwnPropertyNames(src) + .filter(prop => typeof target[prop] === 'undefined') + .reduce((result, prop) => ({ + ...result, + [prop]: Object.getOwnPropertyDescriptor(src, prop), + }), {}); + Object.defineProperties(target, props); +} + +global.window = window; +global.document = window.document; +global.navigator = { + userAgent: 'node.js', +}; +copyProps(window, global); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ba1e625 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12180 @@ +{ + "name": "watermarkjs", + "version": "2.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.0.tgz", + "integrity": "sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.6.0", + "@babel/helpers": "^7.6.0", + "@babel/parser": "^7.6.0", + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.0", + "@babel/types": "^7.6.0", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.0.tgz", + "integrity": "sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA==", + "dev": true, + "requires": { + "@babel/types": "^7.6.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", + "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0", + "esutils": "^2.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", + "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-define-map": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", + "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", + "dev": true, + "requires": { + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.5.5", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "dev": true, + "requires": { + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" + } + }, + "@babel/helpers": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.0.tgz", + "integrity": "sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ==", + "dev": true, + "requires": { + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.0", + "@babel/types": "^7.6.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.0.tgz", + "integrity": "sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", + "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.0.tgz", + "integrity": "sha512-tIt4E23+kw6TgL/edACZwP1OUKrjOTyMrFMLoT5IOFrfMRabCgekjqFd5o6PaAMildBu46oFkekIdMuGkkPEpA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5", + "@babel/helper-split-export-declaration": "^7.4.4", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", + "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", + "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", + "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz", + "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.0.tgz", + "integrity": "sha512-jem7uytlmrRl3iCAuQyw8BpB4c4LWvSpvIeXKpMb+7j84lkx4m4mYr5ErAcmN5KM7B6BqrAvRGjBIbbzqCczew==", + "dev": true, + "requires": { + "regexp-tree": "^0.1.13" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", + "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.4.4", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", + "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", + "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx": "^7.3.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", + "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz", + "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.0" + }, + "dependencies": { + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "dev": true, + "requires": { + "private": "^0.1.6" + } + } + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", + "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", + "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "@babel/polyfill": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.6.0.tgz", + "integrity": "sha512-q5BZJI0n/B10VaQQvln1IlDK3BTBJFbADx7tv+oXDPIDZuTo37H5Adb9jhlXm/fEN4Y7/64qD9mnrJJG7rmaTw==", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "dev": true + } + } + }, + "@babel/preset-env": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.0.tgz", + "integrity": "sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.6.0", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.6.0", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.6.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.0", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.6.0", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + } + }, + "@babel/preset-react": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", + "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0" + } + }, + "@babel/register": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.6.0.tgz", + "integrity": "sha512-78BomdN8el+x/nkup9KwtjJXuptW5oXMFmP11WoM2VJBjxrKv4grC3qjpLL8RGGUYUGsm57xnjYFM2uom+jWUQ==", + "dev": true, + "requires": { + "find-cache-dir": "^2.0.0", + "lodash": "^4.17.13", + "mkdirp": "^0.5.1", + "pirates": "^4.0.0", + "source-map-support": "^0.5.9" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "@babel/template": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", + "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.0" + } + }, + "@babel/traverse": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.0.tgz", + "integrity": "sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.6.0", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", + "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, + "@jest/console": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.0.0.tgz", + "integrity": "sha512-Yu/Uv9+VfWqyTVxTWmFUwPBhaH5daoeO/FPb0QadbRbNbJtV63bhNHGXOo52mTBI5r0YQaMV3x0swRfDgSthcA==", + "dev": true, + "requires": { + "@jest/source-map": "^25.0.0", + "chalk": "^2.0.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@jest/core": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.0.0.tgz", + "integrity": "sha512-pzYp2vZWPP0CGy/63rV37BcKSxTO64jox4Er7GUACHTUmOPmLar4/kb0DgFxDHhiHnRdMlLWVbGYHWdfDyZhBA==", + "dev": true, + "requires": { + "@jest/console": "^25.0.0", + "@jest/reporters": "^25.0.0", + "@jest/test-result": "^25.0.0", + "@jest/transform": "^25.0.0", + "@jest/types": "^25.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^25.0.0", + "jest-config": "^25.0.0", + "jest-haste-map": "^25.0.0", + "jest-message-util": "^25.0.0", + "jest-regex-util": "^25.0.0", + "jest-resolve": "^25.0.0", + "jest-resolve-dependencies": "^25.0.0", + "jest-runner": "^25.0.0", + "jest-runtime": "^25.0.0", + "jest-snapshot": "^25.0.0", + "jest-util": "^25.0.0", + "jest-validate": "^25.0.0", + "jest-watcher": "^25.0.0", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "realpath-native": "^1.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@jest/environment": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.0.0.tgz", + "integrity": "sha512-gRpTtYUHmpXnlfcpwyRz5PHAxPqJaQlUWvKsnkGk/mhXtmlNnsRJTo9RFPxpDYC4DW8frfeffZttxGmWPt7p2A==", + "dev": true, + "requires": { + "@jest/fake-timers": "^25.0.0", + "@jest/transform": "^25.0.0", + "@jest/types": "^25.0.0", + "jest-mock": "^25.0.0" + } + }, + "@jest/fake-timers": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.0.0.tgz", + "integrity": "sha512-b/v/phUcZtwmQK7ttqsPHn+TmwhS75RNS7AILTkTKTeYOCc+aM0BrPrGrNFJnXglehvUJQ+U5q2axYN/1VFt5A==", + "dev": true, + "requires": { + "@jest/types": "^25.0.0", + "jest-message-util": "^25.0.0", + "jest-mock": "^25.0.0" + } + }, + "@jest/reporters": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.0.0.tgz", + "integrity": "sha512-1myFXDCAdSnBlHdFjJW5W6m0GGiSr6ggfZdHRp9w7BlGFsAMiaUqmFdt8GL4WIrG+uoHQcH/yXS3qdCeTx1v7g==", + "dev": true, + "requires": { + "@jest/environment": "^25.0.0", + "@jest/test-result": "^25.0.0", + "@jest/transform": "^25.0.0", + "@jest/types": "^25.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^25.0.0", + "jest-resolve": "^25.0.0", + "jest-runtime": "^25.0.0", + "jest-util": "^25.0.0", + "jest-worker": "^25.0.0", + "node-notifier": "^5.4.3", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^3.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@jest/source-map": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.0.0.tgz", + "integrity": "sha512-L9BMRO692tDYYt0VmrDKDD0AKOIugTOT2qAAzYiA0qXzqqg0a573+HqvP9CXg1l3fJiMIhEkDHiK6V1SfnVO/w==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.0.0.tgz", + "integrity": "sha512-QhGMvMBPpukW+80H3t6sQ5Slv5v/a1hVojZWisZcdAJagDiqqz+R2KO9qtSekYdqpRTJhLEtkB33FVfiSKy1lA==", + "dev": true, + "requires": { + "@jest/console": "^25.0.0", + "@jest/types": "^25.0.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.0.0.tgz", + "integrity": "sha512-+RXqXVSrrgjg7FwAkUOnQPlHljiHLrTA2mhPm4r5KLyFQt/sPdgH6ECeD55Aw5U/1kzt5/MUt6n6uOjpFzT6ag==", + "dev": true, + "requires": { + "@jest/test-result": "^25.0.0", + "jest-haste-map": "^25.0.0", + "jest-runner": "^25.0.0", + "jest-runtime": "^25.0.0" + } + }, + "@jest/transform": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.0.0.tgz", + "integrity": "sha512-0/x368Ls1T8ne8liDDOAUUjO9t6PflznzpmIBJWkU36F3qMW9SfK1WvTGPcYBuICdrzW5Lmt3DLDPENrfeOrNw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^25.0.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^25.0.0", + "jest-regex-util": "^25.0.0", + "jest-util": "^25.0.0", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@jest/types": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.0.0.tgz", + "integrity": "sha512-svDFfLCX2CNXTFxdK3aonxEtASl+KXUd4YOGDJtWNrdgKYHYu1BQRk3/bAKYLoKM80QCpLoqPKJ4Rn9SeNQeXQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@types/babel__core": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", + "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", + "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", + "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/node": { + "version": "12.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz", + "integrity": "sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz", + "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abab": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.1.tgz", + "integrity": "sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", + "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + } + } + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.0.0.tgz", + "integrity": "sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg==", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "dev": true, + "requires": { + "type-fest": "^0.5.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "applescript": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/applescript/-/applescript-0.2.1.tgz", + "integrity": "sha1-y+28U5kAawFRz9u+9WC/tJGklg4=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", + "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.10.0", + "function-bind": "^1.1.1" + } + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.3.0.tgz", + "integrity": "sha1-A5OaYiWCqBLMICMgoLmlbJuBWEk=", + "dev": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "axios": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "dev": true, + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + } + } + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + }, + "dependencies": { + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } + }, + "babel-loader": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + } + } + }, + "babel-plugin-jest-hoist": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.0.0.tgz", + "integrity": "sha512-mWl52OS2AlVbv1Cg3WxdvQk3C88UU63Iv0+jBkcpTuyU49yKpG0hVBX0i4PkCWafCefj6PfWkpzF9ztRU+4nyA==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.0.0.tgz", + "integrity": "sha512-mlgq22WCCEPNzK4hz42lTBCNcOCNEd0Q3xZkSyws+6muTdErgXKFT3AVsjyw1K3WBgu1TVp/HG3GmYAk/pnO1g==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^25.0.0" + } + }, + "babelify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", + "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browser-sync": { + "version": "2.26.7", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.7.tgz", + "integrity": "sha512-lY3emme0OyvA2ujEMpRmyRy9LY6gHLuTr2/ABxhIm3lADOiRXzP4dgekvnDrQqZ/Ec2Fz19lEjm6kglSG5766w==", + "dev": true, + "requires": { + "browser-sync-client": "^2.26.6", + "browser-sync-ui": "^2.26.4", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^2.0.4", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "^3", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "1.15.2", + "immutable": "^3", + "localtunnel": "1.9.2", + "micromatch": "^3.1.10", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.1.1", + "ua-parser-js": "0.7.17", + "yargs": "6.4.0" + } + }, + "browser-sync-client": { + "version": "2.26.6", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.6.tgz", + "integrity": "sha512-mGrkZdNzttKdf/16I+y+2dTQxoMCIpKbVIMJ/uP8ZpnKu9f9qa/2CYVtLtbjZG8nsM14EwiCrjuFTGBEnT3Gjw==", + "dev": true, + "requires": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + } + }, + "browser-sync-ui": { + "version": "2.26.4", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz", + "integrity": "sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA==", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.0.4", + "stream-throttle": "^0.1.3" + } + }, + "browserify": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.0.tgz", + "integrity": "sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^1.11.0", + "browserify-zlib": "~0.2.0", + "buffer": "^5.0.2", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "labeled-stream-splicer": "^2.0.0", + "mkdirp": "^0.5.0", + "module-deps": "^6.0.0", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "stream-http": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.0.tgz", + "integrity": "sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^3.0.6", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + } + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-derequire": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-derequire/-/browserify-derequire-1.0.1.tgz", + "integrity": "sha512-UYKzp7fjiwq2+zj4IgS9lLUhNIdO3I4k+xEAAs5a6i3aQC3E+3gMYq9bDfyckojxNKCPnWxFWjJS4gGcxTXhUw==", + "dev": true, + "requires": { + "derequire": "2.0.6", + "through2": "3.0.1" + }, + "dependencies": { + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + } + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", + "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000989", + "electron-to-chromium": "^1.3.247", + "node-releases": "^1.1.29" + } + }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "bser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", + "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", + "dev": true + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "dependencies": { + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chownr": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dev": true, + "requires": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + } + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "dev": true + }, + "core-js-compat": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", + "dev": true, + "requires": { + "browserslist": "^4.6.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "shasum": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + } + }, + "derequire": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/derequire/-/derequire-2.0.6.tgz", + "integrity": "sha1-MaQUu3yhdiOfp4sRZjbvd9UX52g=", + "dev": true, + "requires": { + "acorn": "^4.0.3", + "concat-stream": "^1.4.6", + "escope": "^3.6.0", + "through2": "^2.0.0", + "yargs": "^6.5.0" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + } + } + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.0.0.tgz", + "integrity": "sha512-JAP22dVPAqvhdRFFxK1G5GViIokyUn0UWXRNW0ztK96fsqi9cuM8w8ESbSk+T2w5OVorcMcL6m7yUg1RrX+2CA==", + "dev": true + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true + }, + "diff-sequences": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.0.0.tgz", + "integrity": "sha512-6KdBSVCp69YOkwCFmAhmJ23A05e4VSrDpnx0gRHkkLGHotSw/r7gSZH9sqP41Z5iAgeXE8UEZNFGO5sH90vXkg==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "dev": true + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eazy-logger": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", + "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", + "dev": true, + "requires": { + "tfunk": "^3.0.1" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.260", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.260.tgz", + "integrity": "sha512-wGt+OivF1C1MPwaSv3LJ96ebNbLAWlx3HndivDDWqwIVSQxmhL17Y/YmwUdEMtS/bPyommELt47Dct0/VZNQBQ==", + "dev": true + }, + "elliptic": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-client": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", + "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "enzyme": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz", + "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==", + "dev": true, + "requires": { + "array.prototype.flat": "^1.2.1", + "cheerio": "^1.0.0-rc.2", + "function.prototype.name": "^1.1.0", + "has": "^1.0.3", + "html-element-map": "^1.0.0", + "is-boolean-object": "^1.0.0", + "is-callable": "^1.1.4", + "is-number-object": "^1.0.3", + "is-regex": "^1.0.4", + "is-string": "^1.0.4", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.6.0", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4", + "object.values": "^1.0.4", + "raf": "^3.4.0", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.1.2" + } + }, + "enzyme-to-json": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.4.0.tgz", + "integrity": "sha512-gbu8P8PMAtb+qtKuGVRdZIYxWHC03q1dGS3EKRmUzmTDIracu3o6cQ0d4xI2YWojbelbxjYOsmqM5EgAL0WgIA==", + "dev": true, + "requires": { + "lodash": "^4.17.12" + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz", + "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.0.0", + "string.prototype.trimright": "^2.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.51", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz", + "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } + } + }, + "es6-symbol": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz", + "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.51" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "expect": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.0.0.tgz", + "integrity": "sha512-irRlenvI1Wh6DbUpiDR1usYTSs9MsmBEMdqs6gH9fI3Dy2j7g00p+Gn4qYQW0v3SsXUYXtWeRFmrkGx91uJQgg==", + "dev": true, + "requires": { + "@jest/types": "^25.0.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^25.0.0", + "jest-matcher-utils": "^25.0.0", + "jest-message-util": "^25.0.0", + "jest-regex-util": "^25.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.1.0.tgz", + "integrity": "sha512-Qts4KCLKG+waHc9C4m07weIY8qyeixoS0h6RnbsNVD6Fw+pEZGW3vTyObL3WXpE09Mq4Oi7/lBEyLmOiLtlYWQ==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.0" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dev": true, + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.1.tgz", + "integrity": "sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1", + "functions-have-names": "^1.1.1", + "is-callable": "^1.1.4" + } + }, + "functions-have-names": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.1.1.tgz", + "integrity": "sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw==", + "dev": true + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-from-current-process-h": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.1.tgz", + "integrity": "sha512-QvP1+tCDjgTiu+akjdEYd8eK8MFYy6nRCRNjfiCeQB9RJEHQZpN+WE+CVqPRNqjIVMwSqd0WiD008B+b7iIdaA==", + "dev": true + }, + "get-uv-event-loop-napi-h": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.5.tgz", + "integrity": "sha512-uWDHId313vRTyqeLhlLWJS0CJOP8QXY5en/9Pv14dnPvAlRfKBfD6h2EDtoy7jxxOIWB9QgzYK16VCN3pCZOBg==", + "dev": true, + "requires": { + "get-symbol-from-current-process-h": "^1.0.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handlebars": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.2.0.tgz", + "integrity": "sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", + "dev": true + }, + "html-element-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.1.0.tgz", + "integrity": "sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA==", + "dev": true, + "requires": { + "array-filter": "^1.0.0" + } + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", + "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", + "dev": true, + "requires": { + "eventemitter3": "1.x.x", + "requires-port": "1.x.x" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "requires": { + "source-map": "~0.5.3" + } + }, + "insert-module-globals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", + "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + } + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-boolean-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", + "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "requires": { + "lodash.isfinite": "^3.3.2" + } + }, + "is-number-object": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", + "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-string": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", + "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "jest-changed-files": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.0.0.tgz", + "integrity": "sha512-vNXbagXYy+HNBb5dqvZ0hvy0X7bIES90HYLW3tm9HBlTf1TQxqatDI3L51+ClVtR3bQkqszIOKagD8CzrBWYqA==", + "dev": true, + "requires": { + "@jest/types": "^25.0.0", + "execa": "^2.0.4", + "throat": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.4.tgz", + "integrity": "sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "npm-run-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", + "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "path-key": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz", + "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==", + "dev": true + } + } + }, + "jest-cli": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.0.0.tgz", + "integrity": "sha512-6PnhszD6DxweZNi4085FKvhcf6gTDWEM9chwAPsPJPL+gGhFQW75GulO7wMBhXzFeK/MIre688DQeqQP6LC2JA==", + "dev": true, + "requires": { + "@jest/core": "^25.0.0", + "@jest/test-result": "^25.0.0", + "@jest/types": "^25.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^25.0.0", + "jest-util": "^25.0.0", + "jest-validate": "^25.0.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^14.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.0.0.tgz", + "integrity": "sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-config": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.0.0.tgz", + "integrity": "sha512-ofxTVx1r95y1HG260JHvR/m8f3M/9DjaTaSA53noXEWGdr4Sat8v5RECOv0rokgbbkCJ+8t0oNP4d5btKUASOw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^25.0.0", + "@jest/types": "^25.0.0", + "babel-jest": "^25.0.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^25.0.0", + "jest-environment-node": "^25.0.0", + "jest-get-type": "^25.0.0", + "jest-jasmine2": "^25.0.0", + "jest-regex-util": "^25.0.0", + "jest-resolve": "^25.0.0", + "jest-util": "^25.0.0", + "jest-validate": "^25.0.0", + "micromatch": "^4.0.2", + "pretty-format": "^25.0.0", + "realpath-native": "^1.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-jest": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.0.0.tgz", + "integrity": "sha512-DUSRasWhUmc3lleq+CyLvUNaotWntnkxArLvteyxVmLPHSZ0k8maB3Ng1SzIqjX6Xh+PERuZ7HCRi4h4XbcOmA==", + "dev": true, + "requires": { + "@jest/transform": "^25.0.0", + "@jest/types": "^25.0.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^25.0.0", + "chalk": "^2.4.2", + "slash": "^3.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-diff": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.0.0.tgz", + "integrity": "sha512-EiuiwtK/s8XCKKOWqozCgMKZeJn+ukjwqDNeo5eaWlHb8vMoH02sw5xE3JkXy2XqSWMyEbzdpDxwniNHToPYWg==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^25.0.0", + "jest-get-type": "^25.0.0", + "pretty-format": "^25.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-docblock": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.0.0.tgz", + "integrity": "sha512-1eB3NdAzyPwH/io73W8wJS2YpzZoLkubX+wMA6SWO9DH8azFcEpQCncuxkvBhOaHTVu97KlTkJTsW7p7s8o7KQ==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.0.0.tgz", + "integrity": "sha512-VMWADBmf+94NyxE4Ivq/mgF7JR4F1PglVIIl789LNBNrW2hGPnDhRUUKl9z8ZoKJ+iuP6yYZiooFdWxyDJKCVQ==", + "dev": true, + "requires": { + "@jest/types": "^25.0.0", + "chalk": "^2.0.1", + "jest-get-type": "^25.0.0", + "jest-util": "^25.0.0", + "pretty-format": "^25.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.0.0.tgz", + "integrity": "sha512-skMbrloUhvu63RGWtsen5/32/Zm1gGIzXpCnvs+R19WyXA1LhVmCr6H6Mlcjt8ptFoNmwmJpPjENWfiTv4JKXg==", + "dev": true, + "requires": { + "@jest/environment": "^25.0.0", + "@jest/fake-timers": "^25.0.0", + "@jest/types": "^25.0.0", + "jest-mock": "^25.0.0", + "jest-util": "^25.0.0", + "jsdom": "^15.1.1" + } + }, + "jest-environment-node": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.0.0.tgz", + "integrity": "sha512-mnW4GMGDNaN9++8fgar30B/dteWghdNA7B42uYDzjLAakp0Gpv55QfqiIrzlKWXoE5EWxInjKYTSRkeQE6jPng==", + "dev": true, + "requires": { + "@jest/environment": "^25.0.0", + "@jest/fake-timers": "^25.0.0", + "@jest/types": "^25.0.0", + "jest-mock": "^25.0.0", + "jest-util": "^25.0.0" + } + }, + "jest-get-type": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.0.0.tgz", + "integrity": "sha512-cdBdr6EMdslO7u2Lo6E/kVdA/ktz73hjnXbRukPp7wMKHOZP3wodWJp9n1iujW3urGK/CbGg+fXqO3HoLQCXaA==", + "dev": true + }, + "jest-haste-map": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.0.0.tgz", + "integrity": "sha512-qZ6PLW5OTor2c7RNpW82MOsyvqCf3fQSkv7VTESFGewHFPnQRBbaUCx8AtneBoPu4Uk2QXldDlOTs2nG4woFoQ==", + "dev": true, + "requires": { + "@jest/types": "^25.0.0", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.9", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^25.0.0", + "jest-util": "^25.0.0", + "jest-worker": "^25.0.0", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "dependencies": { + "anymatch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.0.tgz", + "integrity": "sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-jasmine2": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.0.0.tgz", + "integrity": "sha512-4HDawK+A00BNvfRH93A6gVH4heiOPJ5iHvxjW75DyD4Jj4X9FnfPpdHT2y4hP0WcE0Zg+GnTGoXC/eDVj9RhNQ==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^25.0.0", + "@jest/test-result": "^25.0.0", + "@jest/types": "^25.0.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^25.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^25.0.0", + "jest-matcher-utils": "^25.0.0", + "jest-message-util": "^25.0.0", + "jest-runtime": "^25.0.0", + "jest-snapshot": "^25.0.0", + "jest-util": "^25.0.0", + "pretty-format": "^25.0.0", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.0.0.tgz", + "integrity": "sha512-QlPqlpi2i8gFSNrXkarCJdrFMZCQdy43bw3KHv4plsJWTGBlMM5F3U90UEHoSzX3xiMhXRaIvV7i89kEMVtdbw==", + "dev": true, + "requires": { + "jest-get-type": "^25.0.0", + "pretty-format": "^25.0.0", + "weak-napi": "^1.0.3" + } + }, + "jest-matcher-utils": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.0.0.tgz", + "integrity": "sha512-Zw23jQ5PAgzCmdRFR3LjGAEXIEso5pTeBJjdEf6avEUrnfRe3nXyO0D+Qx88XYcshj9l6WppIvFBQ0u/bo5gcQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^25.0.0", + "jest-get-type": "^25.0.0", + "pretty-format": "^25.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-message-util": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.0.0.tgz", + "integrity": "sha512-xEwyO0ef2ovQyWs+gTHVws8muOJQgaikaS6CcufW0V3Z8Gt75aQhkm5M5qavq2ZwUmtO51FQf5SWPpmvPj+3HA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^25.0.0", + "@jest/types": "^25.0.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-mock": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.0.0.tgz", + "integrity": "sha512-XwXiHahx84TDeSTFgFGe9gWfKZXYITgRynJCETasc7MLfQxUGHFZ/c6zBIUiwZx8JiXUb2/63fm+ZXDwgDKV7w==", + "dev": true, + "requires": { + "@jest/types": "^25.0.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-regex-util": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.0.0.tgz", + "integrity": "sha512-WJ6YhqP6ypf4wIX6aReDP48+/WrhQnp3YujfFXScKgkYEi9jzTa+shQCET0p4KbRC51ML7dNVkXYo9kO3mUliQ==", + "dev": true + }, + "jest-resolve": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.0.0.tgz", + "integrity": "sha512-qjzET5p0nThzmT1FdBOuP0p0Hn0K3zjroVSEB6jwAG6f+eaPcO11P9ij0LJeXrr9hRSkl8kYTuqFLRwqFZqqtQ==", + "dev": true, + "requires": { + "@jest/types": "^25.0.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.0.0.tgz", + "integrity": "sha512-Pjhn3OWOxZZLO3NLsO0gSrR3iU15ReO6wmfgbWmLCE46S8mphhR+Mh6cjnYheKAA+RKBB8Dh0X1qD38sRODlWA==", + "dev": true, + "requires": { + "@jest/types": "^25.0.0", + "jest-regex-util": "^25.0.0", + "jest-snapshot": "^25.0.0" + } + }, + "jest-runner": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.0.0.tgz", + "integrity": "sha512-9GjEozbGL04vkWumRYAlb9saAYZlryFl5of/AcVQZr9mQlPs6mwfJ2R6GA4/aGdCz18g4ypAhVwAY5bsgRsxeg==", + "dev": true, + "requires": { + "@jest/console": "^25.0.0", + "@jest/environment": "^25.0.0", + "@jest/test-result": "^25.0.0", + "@jest/types": "^25.0.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^25.0.0", + "jest-docblock": "^25.0.0", + "jest-haste-map": "^25.0.0", + "jest-jasmine2": "^25.0.0", + "jest-leak-detector": "^25.0.0", + "jest-message-util": "^25.0.0", + "jest-resolve": "^25.0.0", + "jest-runtime": "^25.0.0", + "jest-util": "^25.0.0", + "jest-worker": "^25.0.0", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-runtime": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.0.0.tgz", + "integrity": "sha512-8QY0jlQEQ/GuQVMC1MubXuNpB96ntGw5wBaExG4Q9F2tNMWY2rBjQhGS9SSzZcvBuUhUSetG+83BT7N1bc9rqA==", + "dev": true, + "requires": { + "@jest/console": "^25.0.0", + "@jest/environment": "^25.0.0", + "@jest/source-map": "^25.0.0", + "@jest/transform": "^25.0.0", + "@jest/types": "^25.0.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^25.0.0", + "jest-haste-map": "^25.0.0", + "jest-message-util": "^25.0.0", + "jest-mock": "^25.0.0", + "jest-regex-util": "^25.0.0", + "jest-resolve": "^25.0.0", + "jest-snapshot": "^25.0.0", + "jest-util": "^25.0.0", + "jest-validate": "^25.0.0", + "realpath-native": "^1.1.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^14.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.0.0.tgz", + "integrity": "sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.0.0.tgz", + "integrity": "sha512-ZwIR9GOdYK7E7nhqH+QJHznUN5NkRy1yRKWyAPfXeaQ20gTIaQi001sZX7GGkAyBpNf2f3mFcBD36vNefVU0yQ==", + "dev": true + }, + "jest-snapshot": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.0.0.tgz", + "integrity": "sha512-yrnVlrDOMImCI0DxcIctK6XGleT6YvVBV45V2xwMRKHevc2F3Umlgpjpj2vrrdEJGJrw3mkxOkxNvPoa5HWzbw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^25.0.0", + "chalk": "^2.0.1", + "expect": "^25.0.0", + "jest-diff": "^25.0.0", + "jest-get-type": "^25.0.0", + "jest-matcher-utils": "^25.0.0", + "jest-message-util": "^25.0.0", + "jest-resolve": "^25.0.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^25.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-util": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.0.0.tgz", + "integrity": "sha512-9UFzs7EUDxavMZ3GK9JG3AcTFnZB42ZLwBbVC0yhDr+CdDZRo/9cg6dxP0X5Lii5xaQZxajubr8Wampk2hKVnw==", + "dev": true, + "requires": { + "@jest/console": "^25.0.0", + "@jest/fake-timers": "^25.0.0", + "@jest/source-map": "^25.0.0", + "@jest/test-result": "^25.0.0", + "@jest/types": "^25.0.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-validate": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.0.0.tgz", + "integrity": "sha512-4gZ89icjc1eBcF03/9HvPHOPzcEYDjOxJS0f0I82Sq/UEcjyqjpTN32gdQZPcO+z22PH/Q/gPy9IPE3Y9L1zGw==", + "dev": true, + "requires": { + "@jest/types": "^25.0.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^25.0.0", + "leven": "^3.1.0", + "pretty-format": "^25.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-watcher": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.0.0.tgz", + "integrity": "sha512-BghKLLn999ZtyAInLvCY9/VJZ5AjyBAHoKlYstpwUkfwbKUYtq0Yh23K2lacSeWiHDOvL5tEx9ydD2xiBl8kkA==", + "dev": true, + "requires": { + "@jest/test-result": "^25.0.0", + "@jest/types": "^25.0.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^2.0.1", + "jest-util": "^25.0.0", + "string-length": "^3.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-worker": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.0.0.tgz", + "integrity": "sha512-eFK2iNwjT1v5OHyX8uTNU9K/j6liIH8mRKi7wKJ4BDl6ervAO/lgjOMQ7PjB57LAvBgGsV/9f51zDQ2Rm2dwmw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.0.0.tgz", + "integrity": "sha512-WRt32iTpYEZWYOpcetGm0NPeSvaebccx7hhS/5M6sAiqnhedtFCHFxkjzZlJvFNCPowiKSFGiZk5USQDFy83vQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.1.1.tgz", + "integrity": "sha512-cQZRBB33arrDAeCrAEWn1U3SvrvC8XysBua9Oqg1yWrsY/gYcusloJC3RZJXuY5eehSCmws8f2YeliCqGSkrtQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^6.1.1", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.3.6", + "cssstyle": "^1.2.2", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.1.4", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true + }, + "ws": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.2.tgz", + "integrity": "sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg==", + "dev": true, + "requires": { + "async-limiter": "^1.0.0" + } + } + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "limiter": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz", + "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "localtunnel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.2.tgz", + "integrity": "sha512-NEKF7bDJE9U3xzJu3kbayF0WTvng6Pww7tzqNb/XtEARYwqw7CKEX7BvOMg98FtE9es2CRizl61gkV3hS8dqYg==", + "dev": true, + "requires": { + "axios": "0.19.0", + "debug": "4.1.1", + "openurl": "1.1.1", + "yargs": "6.6.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mitt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", + "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "module-deps": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.1.tgz", + "integrity": "sha512-UnEn6Ah36Tu4jFiBbJVUtt0h+iXqxpLqDvPS8nllbw5RZFmNJ1+Mz5BjYnM9ieH80zyxHkARGLnMIHlPK5bu6A==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "browser-resolve": "^1.7.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.0.2", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + } + } + }, + "moo": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", + "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nearley": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.0.tgz", + "integrity": "sha512-2v52FTw7RPqieZr3Gth1luAXZR7Je6q3KaDHY5bjl/paDUdMu35fZ8ICNgiYJRr3tf3NMvIQQR1r27AvEr9CRA==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "moo": "^0.4.3", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6", + "semver": "^5.4.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-addon-api": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz", + "integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true + } + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-notify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-notify/-/node-notify-1.0.0.tgz", + "integrity": "sha1-fJbpbIeQhorelD+wJcKuHnQifnM=", + "dev": true, + "requires": { + "applescript": "~0.2.1" + } + }, + "node-releases": { + "version": "1.1.32", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.32.tgz", + "integrity": "sha512-VhVknkitq8dqtWoluagsGPn3dxTvN9fwgR59fV3D7sLBHe0JfDramsMI8n8mY//ccq/Kkrf8ZRHRpsyVZ3qw1A==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwsapi": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-path": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", + "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-each-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", + "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "requires": { + "path-platform": "~0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "pretty-format": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.0.0.tgz", + "integrity": "sha512-0neOC1g/eAISiEeRzK2QRF/8U5o1EE3jZwuHSc49qYMdCLgckxeK7bnMw31YdbP34zcWYD4nvWnldNZ+S3okMw==", + "dev": true, + "requires": { + "@jest/types": "^25.0.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.8.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.1.0.tgz", + "integrity": "sha512-Qts4KCLKG+waHc9C4m07weIY8qyeixoS0h6RnbsNVD6Fw+pEZGW3vTyObL3WXpE09Mq4Oi7/lBEyLmOiLtlYWQ==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prompts": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "psl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, + "requires": { + "performance-now": "^2.1.0" + } + }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", + "dev": true + }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dev": true, + "requires": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react-is": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", + "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==", + "dev": true + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp-tree": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.13.tgz", + "integrity": "sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw==", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "dev": true, + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", + "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", + "dev": true, + "requires": { + "lodash.flattendeep": "^4.4.0", + "nearley": "^2.7.10" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "requires": { + "xmlchars": "^2.1.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setimmediate-napi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setimmediate-napi/-/setimmediate-napi-1.0.3.tgz", + "integrity": "sha512-ah02BktAAJJ1eHANtD93ZdvKZrCXJwSHXww5arS1YcihOlpJlwsVkns4BXh6sRJNAyWTLl6TkjVx8CjKV9qwcQ==", + "dev": true, + "requires": { + "get-uv-event-loop-napi-h": "^1.0.2" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "requires": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "dev": true + }, + "sisteransi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.3.1", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "requires": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + } + }, + "string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.trim": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz", + "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.13.0", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "requires": { + "minimist": "^1.1.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "requires": { + "acorn-node": "^1.2.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.1.tgz", + "integrity": "sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "tfunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", + "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "object-path": "^0.9.0" + } + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "requires": { + "process": "~0.11.0" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", + "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "ua-parser-js": { + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", + "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", + "dev": true + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true + }, + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "weak-napi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/weak-napi/-/weak-napi-1.0.3.tgz", + "integrity": "sha512-cyqeMaYA5qI7RoZKAKvIHwEROEKDNxK7jXj3u56nF2rGBh+HFyhYmBb1/wAN4RqzRmkYKVVKQyqHpBoJjqtGUA==", + "dev": true, + "requires": { + "bindings": "^1.3.0", + "node-addon-api": "^1.1.0", + "setimmediate-napi": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.40.2.tgz", + "integrity": "sha512-5nIvteTDCUws2DVvP9Qe+JPla7kWPPIDFZv55To7IycHWZ+Z5qBdaBYPyuXWdhggTufZkQwfIK+5rKQTVovm2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.9.tgz", + "integrity": "sha512-xwnSxWl8nZtBl/AFJCOn9pG7s5CYUYdZxmmukv+fAHLcBIHM36dImfpQg3WfShZXeArkWlf6QRw24Klcsv8a5A==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.0.tgz", + "integrity": "sha512-EIgkf60l2oWsffja2Sf2AL384dx328c0B+cIYPTQq5q2rOYuDV00/iPFBOUiDKKwKMOhkymH8AidPaRvzfxY+Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + }, + "yargs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", + "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.1.0" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/package.json b/package.json index d5673c4..ff15413 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,10 @@ "description": "Watermarked images in the browser", "main": "dist/watermark.js", "scripts": { - "test": "jest", + "test-debug": "jest --env=jsdom", + "test": "jest --env=jsdom --verbose --runInBand --detectOpenHandles", + "test-watch": "jest --env=jsdom --watch", + "test-coverage": "jest --env=jsdom --coverage", "bundle": "webpack", "minify": "uglifyjs --compress --mangle --screw-ie8 -o dist/watermark.min.js dist/watermark.js", "sync": "browser-sync start --server examples --index index.html --files 'examples/**/*.css, examples/**/*.html, examples/**/*.js' --port 4000", @@ -30,27 +33,23 @@ }, "homepage": "https://github.com/brianium/watermarkjs", "devDependencies": { - "babel-jest": "^6.0.1", - "babel-polyfill": "^6.3.14", - "babel-preset-es2015": "^6.3.13", - "babel-register": "^6.3.13", - "babelify": "^7.2.0", - "browser-sync": "^2.10.0", - "browserify": "^12.0.1", - "browserify-derequire": "^0.9.4", - "jest-cli": "^0.8.1", + "@babel/polyfill": "^7.4.4", + "@babel/preset-env": "^7.5.5", + "@babel/preset-react": "^7.0.0", + "@babel/register": "^7.5.5", + "babel-jest": "^24.9.0", + "babel-loader": "^8.0.6", + "babelify": "^10.0.0", + "browser-sync": "^2.26.7", + "browserify": "^16.5.0", + "browserify-derequire": "^1.0.1", + "enzyme": "^3.10.0", + "enzyme-adapter-react-16": "^1.14.0", + "enzyme-to-json": "^3.4.0", + "jest-cli": "^25.0.0", "node-notify": "^1.0.0", - "watch": "^0.16.0", - "webpack": "^1.12.9" - }, - "jest": { - "setupEnvScriptFile": "jestEnvironment.js", - "scriptPreprocessor": "/node_modules/babel-jest", - "testFileExtensions": [ - "js" - ], - "moduleFileExtensions": [ - "js" - ] + "watch": "^1.0.2", + "webpack": "^4.40.2", + "webpack-cli": "^3.3.9" } } diff --git a/webpack.config.js b/webpack.config.js index 0ab3a3f..cd3b2b9 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -12,10 +12,7 @@ module.exports = { loaders: [ { test: /\.js$/, - loader: 'babel', - query: { - presets: ['es2015'] - }, + loader: 'babel-loader', include: [ path.resolve(__dirname, "lib") ] From 1b14db0919f70d1da603c2643e7a336aa45febbf Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Tue, 17 Sep 2019 16:42:27 -0300 Subject: [PATCH 02/15] Update webpack settings. --- dist/watermark.js | 1153 ++++++----------------------- dist/watermark.min.js | 2 +- examples/scripts/watermark.js | 1153 ++++++----------------------- examples/scripts/watermark.min.js | 2 +- package-lock.json | 149 +++- package.json | 3 +- webpack.config.js | 4 +- 7 files changed, 577 insertions(+), 1889 deletions(-) diff --git a/dist/watermark.js b/dist/watermark.js index 052f295..6c159e2 100644 --- a/dist/watermark.js +++ b/dist/watermark.js @@ -7,977 +7,248 @@ exports["watermark"] = factory(); else root["watermark"] = factory(); -})(this, function() { +})(window, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; - +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { - +/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) +/******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; - +/******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} /******/ }; - +/******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - +/******/ /******/ // Flag the module as loaded -/******/ module.loaded = true; - +/******/ module.l = true; +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } - - +/******/ +/******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; - +/******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; - +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; - +/******/ +/******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(0); +/******/ return __webpack_require__(__webpack_require__.s = "./index.js"); /******/ }) /************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { +/******/ ({ + +/***/ "./index.js": +/*!******************!*\ + !*** ./index.js ***! + \******************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(/*! @babel/register */ \"./node_modules/@babel/register/lib/index.js\");\nmodule.exports = __webpack_require__(/*! ./lib/index */ \"./lib/index.js\").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?"); + +/***/ }), + +/***/ "./lib/blob/index.js": +/*!***************************!*\ + !*** ./lib/blob/index.js ***! + \***************************/ +/*! exports provided: split, decode, uint8, blob */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"split\", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"decode\", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"uint8\", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"blob\", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__[\"sequence\"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?"); + +/***/ }), + +/***/ "./lib/canvas/index.js": +/*!*****************************!*\ + !*** ./lib/canvas/index.js ***! + \*****************************/ +/*! exports provided: dataUrl */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dataUrl\", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?"); + +/***/ }), + +/***/ "./lib/canvas/pool.js": +/*!****************************!*\ + !*** ./lib/canvas/pool.js ***! + \****************************/ +/*! exports provided: CanvasPool, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?"); + +/***/ }), + +/***/ "./lib/functions/index.js": +/*!********************************!*\ + !*** ./lib/functions/index.js ***! + \********************************/ +/*! exports provided: sequence, identity */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sequence\", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"identity\", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?"); + +/***/ }), + +/***/ "./lib/image/index.js": +/*!****************************!*\ + !*** ./lib/image/index.js ***! + \****************************/ +/*! exports provided: getLoader, load, loadUrl, loadFile, createImage, imageToCanvas, mapToCanvas */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoader\", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"load\", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadUrl\", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFile\", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createImage\", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"imageToCanvas\", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToCanvas\", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it's type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === 'string') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === 'function' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it's onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === 'function') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?"); + +/***/ }), + +/***/ "./lib/index.js": +/*!**********************!*\ + !*** ./lib/index.js ***! + \**********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ \"./lib/image/index.js\");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ \"./lib/canvas/index.js\");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ \"./lib/blob/index.js\");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ \"./lib/style/index.js\");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ \"./lib/object/index.js\");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ \"./lib/canvas/pool.js\");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"extend\"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"clone\"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result's canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__[\"dataUrl\"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__[\"load\"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__[\"mapToCanvas\"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__[\"result\"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__[\"load\"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__[\"load\"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__[\"blob\"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__[\"createImage\"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__[\"image\"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__[\"text\"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__[\"default\"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?"); + +/***/ }), + +/***/ "./lib/object/index.js": +/*!*****************************!*\ + !*** ./lib/object/index.js ***! + \*****************************/ +/*! exports provided: extend, clone */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"extend\", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"clone\", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?"); + +/***/ }), + +/***/ "./lib/style/image/index.js": +/*!**********************************!*\ + !*** ./lib/style/image/index.js ***! + \**********************************/ +/*! exports provided: atPos, lowerRight, upperRight, lowerLeft, upperLeft, center */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); + +/***/ }), + +/***/ "./lib/style/index.js": +/*!****************************!*\ + !*** ./lib/style/index.js ***! + \****************************/ +/*! exports provided: image, text, result */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"image\", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"text\", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"result\", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ \"./lib/style/image/index.js\");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ \"./lib/style/text/index.js\");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?"); + +/***/ }), + +/***/ "./lib/style/text/index.js": +/*!*********************************!*\ + !*** ./lib/style/text/index.js ***! + \*********************************/ +/*! exports provided: atPos, lowerRight, lowerLeft, upperRight, upperLeft, center */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext('2d');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = 'center';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = 'middle';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?"); - __webpack_require__(1); - module.exports = __webpack_require__(2).default; +/***/ }), +/***/ "./node_modules/@babel/register/lib/browser.js": +/*!*****************************************************!*\ + !*** ./node_modules/@babel/register/lib/browser.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { -/***/ }, -/* 1 */ -/***/ function(module, exports) { +"use strict"; +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?"); - // required to safely use babel/register within a browserify codebase +/***/ }), - "use strict"; +/***/ "./node_modules/@babel/register/lib/index.js": +/*!***************************************************!*\ + !*** ./node_modules/@babel/register/lib/index.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - exports.__esModule = true; +eval("exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ \"./node_modules/@babel/register/lib/browser.js\");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?"); - exports["default"] = function () {}; - - module.exports = exports["default"]; +/***/ }) -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = watermark; - - var _image = __webpack_require__(3); - - var _canvas = __webpack_require__(5); - - var _blob = __webpack_require__(6); - - var _style = __webpack_require__(7); - - var style = _interopRequireWildcard(_style); - - var _object = __webpack_require__(10); - - var _pool = __webpack_require__(11); - - var _pool2 = _interopRequireDefault(_pool); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - - /** - * A configuration type for the watermark function - * - * @typedef {Object} Options - * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls) - * @property {Number} poolSize - number of canvas elements available for drawing, - * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored - */ - - /** - * @constant - * @type {Options} - */ - var defaults = { - init: function init() {} - }; - - /** - * Merge the given options with the defaults - * - * @param {Options} options - * @return {Options} - */ - function mergeOptions(options) { - return (0, _object.extend)((0, _object.clone)(defaults), options); - } - - /** - * Release canvases from a draw result for reuse. Returns - * the dataURL from the result's canvas - * - * @param {DrawResult} result - * @param {CanvasPool} pool - * @return {String} - */ - function release(result, pool) { - var canvas = result.canvas; - var sources = result.sources; - - var dataURL = (0, _canvas.dataUrl)(canvas); - sources.forEach(pool.release); - return dataURL; - } - - /** - * Return a watermark object - * - * - * @param {Array} resources - a collection of urls, File objects, or Image objects - * @param {Options} options - a configuration object for watermark - * @param {Promise} promise - optional - * @return {Object} - */ - function watermark(resources) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var promise = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; - - var opts = mergeOptions(options); - promise || (promise = (0, _image.load)(resources, opts.init)); - - return { - /** - * Convert the watermarked image into a dataUrl. The draw - * function is given all images as canvas elements in order - * - * @param {Function} draw - * @return {Object} - */ - - dataUrl: function dataUrl(draw) { - var promise = this.then(function (images) { - return (0, _image.mapToCanvas)(images, _pool2.default); - }).then(function (canvases) { - return style.result(draw, canvases); - }).then(function (result) { - return release(result, _pool2.default); - }); - - return watermark(resources, opts, promise); - }, - - /** - * Load additional resources - * - * @param {Array} resources - a collection of urls, File objects, or Image objects - * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls) - * @return {Object} - */ - load: function load(resources, init) { - var promise = this.then(function (resource) { - return (0, _image.load)([resource].concat(resources), init); - }); - - return watermark(resources, opts, promise); - }, - - /** - * Render the current state of the watermarked image. Useful for performing - * actions after the watermark has been applied - * - * @return {Object} - */ - render: function render() { - var promise = this.then(function (resource) { - return (0, _image.load)([resource]); - }); - - return watermark(resources, opts, promise); - }, - - /** - * Convert the watermark into a blob - * - * @param {Function} draw - * @return {Object} - */ - blob: function blob(draw) { - var promise = this.dataUrl(draw).then(_blob.blob); - - return watermark(resources, opts, promise); - }, - - /** - * Convert the watermark into an image using the given draw function - * - * @param {Function} draw - * @return {Object} - */ - image: function image(draw) { - var promise = this.dataUrl(draw).then(_image.createImage); - - return watermark(resources, opts, promise); - }, - - /** - * Delegate to the watermark promise - * - * @return {Promise} - */ - then: function then() { - for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) { - funcs[_key] = arguments[_key]; - } - - return promise.then.apply(promise, funcs); - } - }; - }; - - /** - * Style functions - */ - watermark.image = style.image; - watermark.text = style.text; - - /** - * Clean up all canvas references - */ - watermark.destroy = function () { - return _pool2.default.clear(); - }; - -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getLoader = getLoader; - exports.load = load; - exports.loadUrl = loadUrl; - exports.loadFile = loadFile; - exports.createImage = createImage; - exports.imageToCanvas = imageToCanvas; - exports.mapToCanvas = mapToCanvas; - - var _functions = __webpack_require__(4); - - function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } - - /** - * Set the src of an image object and call the resolve function - * once it has loaded - * - * @param {Image} img - * @param {String} src - * @param {Function} resolve - */ - function setAndResolve(img, src, resolve) { - img.onload = function () { - return resolve(img); - }; - img.src = src; - } - - /** - * Given a resource, return an appropriate loading function for it's type - * - * @param {String|File|Image} resource - * @return {Function} - */ - function getLoader(resource) { - var type = typeof resource === 'undefined' ? 'undefined' : _typeof(resource); - - if (type === 'string') { - return loadUrl; - } - - if (resource instanceof Image) { - return _functions.identity; - } - - return loadFile; - } - - /** - * Used for loading image resources asynchronously and maintaining - * the supplied order of arguments - * - * @param {Array} resources - a mixed array of urls, File objects, or Image objects - * @param {Function} init - called at the beginning of resource initialization - * @return {Promise} - */ - function load(resources, init) { - var promises = []; - for (var i = 0; i < resources.length; i++) { - var resource = resources[i]; - var loader = getLoader(resource); - var promise = loader(resource, init); - promises.push(promise); - } - return Promise.all(promises); - } - - /** - * Load an image by its url - * - * @param {String} url - * @param {Function} init - an optional image initializer - * @return {Promise} - */ - function loadUrl(url, init) { - var img = new Image(); - typeof init === 'function' && init(img); - return new Promise(function (resolve) { - img.onload = function () { - return resolve(img); - }; - img.src = url; - }); - } - - /** - * Return a collection of images from an - * array of File objects - * - * @param {File} file - * @return {Promise} - */ - function loadFile(file) { - var reader = new FileReader(); - return new Promise(function (resolve) { - var img = new Image(); - reader.onloadend = function () { - return setAndResolve(img, reader.result, resolve); - }; - reader.readAsDataURL(file); - }); - } - - /** - * Create a new image, optionally configuring it's onload behavior - * - * @param {String} url - * @param {Function} onload - * @return {Image} - */ - function createImage(url, onload) { - var img = new Image(); - if (typeof onload === 'function') { - img.onload = onload; - } - img.src = url; - return img; - } - - /** - * Draw an image to a canvas element - * - * @param {Image} img - * @param {HTMLCanvasElement} canvas - * @return {HTMLCanvasElement} - */ - function drawImage(img, canvas) { - var ctx = canvas.getContext('2d'); - - canvas.width = img.width; - canvas.height = img.height; - ctx.drawImage(img, 0, 0); - return canvas; - } - - /** - * Convert an Image object to a canvas - * - * @param {Image} img - * @param {CanvasPool} pool - * @return {HTMLCanvasElement} - */ - function imageToCanvas(img, pool) { - var canvas = pool.pop(); - return drawImage(img, canvas); - } - - /** - * Convert an array of image objects - * to canvas elements - * - * @param {Array} images - * @param {CanvasPool} pool - * @return {HTMLCanvasElement[]} - */ - function mapToCanvas(images, pool) { - return images.map(function (img) { - return imageToCanvas(img, pool); - }); - } - -/***/ }, -/* 4 */ -/***/ function(module, exports) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.sequence = sequence; - exports.identity = identity; - /** - * Return a function that executes a sequence of functions from left to right, - * passing the result of a previous operation to the next - * - * @param {...funcs} - * @return {Function} - */ - function sequence() { - for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) { - funcs[_key] = arguments[_key]; - } - - return function (value) { - return funcs.reduce(function (val, fn) { - return fn.call(null, val); - }, value); - }; - } - - /** - * Return the argument passed to it - * - * @param {Mixed} x - * @return {Mixed} - */ - function identity(x) { - return x; - } - -/***/ }, -/* 5 */ -/***/ function(module, exports) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.dataUrl = dataUrl; - /** - * Get the data url of a canvas - * - * @param {HTMLCanvasElement} - * @return {String} - */ - function dataUrl(canvas) { - return canvas.toDataURL(); - } - -/***/ }, -/* 6 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.blob = undefined; - exports.split = split; - exports.decode = decode; - exports.uint8 = uint8; - - var _functions = __webpack_require__(4); - - var url = /^data:([^;]+);base64,(.*)$/; - - /** - * Split a data url into a content type and raw data - * - * @param {String} dataUrl - * @return {Array} - */ - function split(dataUrl) { - return url.exec(dataUrl).slice(1); - } - - /** - * Decode a base64 string - * - * @param {String} base64 - * @return {String} - */ - function decode(base64) { - return window.atob(base64); - } - - /** - * Return a string of raw data as a Uint8Array - * - * @param {String} data - * @return {UInt8Array} - */ - function uint8(data) { - var length = data.length; - var uints = new Uint8Array(length); - - for (var i = 0; i < length; i++) { - uints[i] = data.charCodeAt(i); - } - - return uints; - } - - /** - * Turns a data url into a blob object - * - * @param {String} dataUrl - * @return {Blob} - */ - var blob = exports.blob = (0, _functions.sequence)(split, function (parts) { - return [decode(parts[1]), parts[0]]; - }, function (blob) { - return new Blob([uint8(blob[0])], { type: blob[1] }); - }); - -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.text = exports.image = undefined; - exports.result = result; - - var _image = __webpack_require__(8); - - var img = _interopRequireWildcard(_image); - - var _text = __webpack_require__(9); - - var txt = _interopRequireWildcard(_text); - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - - /** - * @typedef {Object} DrawResult - * @property {HTMLCanvasElement} canvas - the end result of a draw - * @property {HTMLCanvasElement[]} sources - the sources used in the draw - */ - - var image = exports.image = img; - var text = exports.text = txt; - - /** - * Create a DrawResult by apply a list of canvas elements to a draw function - * - * @param {Function} draw - the draw function used to create a DrawResult - * @param {HTMLCanvasElement} sources - the canvases used by the draw function - * @return {DrawResult} - */ - function result(draw, sources) { - var canvas = draw.apply(null, sources); - return { - canvas: canvas, - sources: sources - }; - } - -/***/ }, -/* 8 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.atPos = atPos; - exports.lowerRight = lowerRight; - exports.upperRight = upperRight; - exports.lowerLeft = lowerLeft; - exports.upperLeft = upperLeft; - exports.center = center; - /** - * Return a function for positioning a watermark on a target canvas - * - * @param {Function} xFn - a function to determine an x value - * @param {Function} yFn - a function to determine a y value - * @param {Number} alpha - * @return {Function} - */ - function atPos(xFn, yFn, alpha) { - alpha || (alpha = 1.0); - return function (target, watermark) { - var context = target.getContext('2d'); - context.save(); - - context.globalAlpha = alpha; - context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark)); - - context.restore(); - return target; - }; - } - - /** - * Place the watermark in the lower right corner of the target - * image - * - * @param {Number} alpha - * @return {Function} - */ - function lowerRight(alpha) { - return atPos(function (target, mark) { - return target.width - (mark.width + 10); - }, function (target, mark) { - return target.height - (mark.height + 10); - }, alpha); - } - - /** - * Place the watermark in the upper right corner of the target - * image - * - * @param {Number} alpha - * @return {Function} - */ - function upperRight(alpha) { - return atPos(function (target, mark) { - return target.width - (mark.width + 10); - }, function (target, mark) { - return 10; - }, alpha); - } - - /** - * Place the watermark in the lower left corner of the target - * image - * - * @param {Number} alpha - * @return {Function} - */ - function lowerLeft(alpha) { - return atPos(function (target, mark) { - return 10; - }, function (target, mark) { - return target.height - (mark.height + 10); - }, alpha); - } - - /** - * Place the watermark in the upper left corner of the target - * image - * - * @param {Number} alpha - * @return {Function} - */ - function upperLeft(alpha) { - return atPos(function (target, mark) { - return 10; - }, function (target, mark) { - return 10; - }, alpha); - } - - /** - * Place the watermark in the center of the target - * image - * - * @param {Number} alpha - * @return {Function} - */ - function center(alpha) { - return atPos(function (target, mark) { - return (target.width - mark.width) / 2; - }, function (target, mark) { - return (target.height - mark.height) / 2; - }, alpha); - } - -/***/ }, -/* 9 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.atPos = atPos; - exports.lowerRight = lowerRight; - exports.lowerLeft = lowerLeft; - exports.upperRight = upperRight; - exports.upperLeft = upperLeft; - exports.center = center; - /** - * Return a function for positioning a watermark on a target canvas - * - * @param {Function} xFn - a function to determine an x value - * @param {Function} yFn - a function to determine a y value - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - * @return {Function} - */ - function atPos(xFn, yFn, text, font, fillStyle, alpha) { - alpha || (alpha = 1.0); - return function (target) { - var context = target.getContext('2d'); - context.save(); - - context.globalAlpha = alpha; - context.fillStyle = fillStyle; - context.font = font; - var metrics = context.measureText(text); - context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context)); - - context.restore(); - return target; - }; - } - - /** - * Write text to the lower right corner of the target canvas - * - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - control text transparency - * @param {Number} y - height in text metrics is not very well supported. This is a manual value - * @return {Function} - */ - function lowerRight(text, font, fillStyle, alpha, y) { - return atPos(function (target, metrics) { - return target.width - (metrics.width + 10); - }, function (target) { - return y || target.height - 10; - }, text, font, fillStyle, alpha); - } - - /** - * Write text to the lower left corner of the target canvas - * - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - control text transparency - * @param {Number} y - height in text metrics is not very well supported. This is a manual value - * @return {Function} - */ - function lowerLeft(text, font, fillStyle, alpha, y) { - return atPos(function () { - return 10; - }, function (target) { - return y || target.height - 10; - }, text, font, fillStyle, alpha); - } - - /** - * Write text to the upper right corner of the target canvas - * - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - control text transparency - * @param {Number} y - height in text metrics is not very well supported. This is a manual value - * @return {Function} - */ - function upperRight(text, font, fillStyle, alpha, y) { - return atPos(function (target, metrics) { - return target.width - (metrics.width + 10); - }, function () { - return y || 20; - }, text, font, fillStyle, alpha); - } - - /** - * Write text to the upper left corner of the target canvas - * - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - control text transparency - * @param {Number} y - height in text metrics is not very well supported. This is a manual value - * @return {Function} - */ - function upperLeft(text, font, fillStyle, alpha, y) { - return atPos(function () { - return 10; - }, function () { - return y || 20; - }, text, font, fillStyle, alpha); - } - - /** - * Write text to the center of the target canvas - * - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - control text transparency - * @param {Number} y - height in text metrics is not very well supported. This is a manual value - * @return {Function} - */ - function center(text, font, fillStyle, alpha, y) { - return atPos(function (target, metrics, ctx) { - ctx.textAlign = 'center';return target.width / 2; - }, function (target, metrics, ctx) { - ctx.textBaseline = 'middle';return target.height / 2; - }, text, font, fillStyle, alpha); - } - -/***/ }, -/* 10 */ -/***/ function(module, exports) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.extend = extend; - exports.clone = clone; - /** - * Extend one object with the properties of another - * - * @param {Object} first - * @param {Object} second - * @return {Object} - */ - function extend(first, second) { - var secondKeys = Object.keys(second); - secondKeys.forEach(function (key) { - return first[key] = second[key]; - }); - return first; - } - - /** - * Create a shallow copy of the object - * - * @param {Object} obj - * @return {Object} - */ - function clone(obj) { - return extend({}, obj); - } - -/***/ }, -/* 11 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.CanvasPool = CanvasPool; - /** - * An immutable canvas pool allowing more efficient use of canvas resources - * - * @typedef {Object} CanvasPool - * @property {Function} pop - return a promise that will evaluate to a canvas - * @property {Number} length - the number of available canvas elements - * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool - * @property {Function} clear - empty the pool of canvas elements - * @property {Function} release - free a pool up for release and return the data url - */ - - /** - * Create a CanvasPool with the given size - * - * @param {Number} size - * @param {HTMLCanvasElement[]} elements - * @param {EventEmitter} eventEmitter - * @return {CanvasPool} - */ - function CanvasPool() { - var canvases = []; - - return { - /** - * Get the next available canvas from the pool - * - * @return {HTMLCanvasElement} - */ - - pop: function pop() { - if (this.length === 0) { - canvases.push(document.createElement('canvas')); - } - - return canvases.pop(); - }, - - /** - * Return the number of available canvas elements in the pool - * - * @return {Number} - */ - get length() { - return canvases.length; - }, - - /** - * Return a canvas to the pool. This function will clear the canvas for reuse - * - * @param {HTMLCanvasElement} canvas - * @return {String} - */ - release: function release(canvas) { - var context = canvas.getContext('2d'); - context.clearRect(0, 0, canvas.width, canvas.height); - canvases.push(canvas); - }, - - /** - * Empty the pool, destroying any references to canvas objects - */ - clear: function clear() { - canvases.splice(0, canvases.length); - }, - - /** - * Return the collection of canvases in the pool - * - * @return {HTMLCanvasElement[]} - */ - get elements() { - return canvases; - } - }; - } - - var shared = CanvasPool(); - exports.default = shared; - -/***/ } -/******/ ]) -}); -; \ No newline at end of file +/******/ }); +}); \ No newline at end of file diff --git a/dist/watermark.min.js b/dist/watermark.min.js index bee377a..2eceddf 100644 --- a/dist/watermark.min.js +++ b/dist/watermark.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():t.watermark=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var u=n[r]={exports:{},id:r,loaded:!1};return t[r].call(u.exports,u,u.exports,e),u.loaded=!0,u.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){n(1),t.exports=n(2).default},function(t,e){"use strict";e.__esModule=!0,e.default=function(){},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function u(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t){return(0,h.extend)((0,h.clone)(v),t)}function i(t,e){var n=t.canvas,r=t.sources,u=(0,f.dataUrl)(n);return r.forEach(e.release),u}function c(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n=arguments.length<=2||void 0===arguments[2]?null:arguments[2],r=o(e);return n||(n=(0,a.load)(t,r.init)),{dataUrl:function(e){var n=this.then(function(t){return(0,a.mapToCanvas)(t,g.default)}).then(function(t){return d.result(e,t)}).then(function(t){return i(t,g.default)});return c(t,r,n)},load:function(t,e){var n=this.then(function(n){return(0,a.load)([n].concat(t),e)});return c(t,r,n)},render:function(){var e=this.then(function(t){return(0,a.load)([t])});return c(t,r,e)},blob:function(e){var n=this.dataUrl(e).then(l.blob);return c(t,r,n)},image:function(e){var n=this.dataUrl(e).then(a.createImage);return c(t,r,n)},then:function(){for(var t=arguments.length,e=Array(t),r=0;t>r;r++)e[r]=arguments[r];return n.then.apply(n,e)}}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=c;var a=n(3),f=n(5),l=n(6),s=n(7),d=u(s),h=n(10),p=n(11),g=r(p),v={init:function(){}};c.image=d.image,c.text=d.text,c.destroy=function(){return g.default.clear()}},function(t,e,n){"use strict";function r(t){return t&&"undefined"!=typeof Symbol&&t.constructor===Symbol?"symbol":typeof t}function u(t,e,n){t.onload=function(){return n(t)},t.src=e}function o(t){var e="undefined"==typeof t?"undefined":r(t);return"string"===e?c:t instanceof Image?h.identity:a}function i(t,e){for(var n=[],r=0;rn;n++)e[n]=arguments[n];return function(t){return e.reduce(function(t,e){return e.call(null,t)},t)}}function r(t){return t}Object.defineProperty(e,"__esModule",{value:!0}),e.sequence=n,e.identity=r},function(t,e){"use strict";function n(t){return t.toDataURL()}Object.defineProperty(e,"__esModule",{value:!0}),e.dataUrl=n},function(t,e,n){"use strict";function r(t){return c.exec(t).slice(1)}function u(t){return window.atob(t)}function o(t){for(var e=t.length,n=new Uint8Array(e),r=0;e>r;r++)n[r]=t.charCodeAt(r);return n}Object.defineProperty(e,"__esModule",{value:!0}),e.blob=void 0,e.split=r,e.decode=u,e.uint8=o;var i=n(4),c=/^data:([^;]+);base64,(.*)$/;e.blob=(0,i.sequence)(r,function(t){return[u(t[1]),t[0]]},function(t){return new Blob([o(t[0])],{type:t[1]})})},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function u(t,e){var n=t.apply(null,e);return{canvas:n,sources:e}}Object.defineProperty(e,"__esModule",{value:!0}),e.text=e.image=void 0,e.result=u;var o=n(8),i=r(o),c=n(9),a=r(c);e.image=i,e.text=a},function(t,e){"use strict";function n(t,e,n){return n||(n=1),function(r,u){var o=r.getContext("2d");return o.save(),o.globalAlpha=n,o.drawImage(u,t(r,u),e(r,u)),o.restore(),r}}function r(t){return n(function(t,e){return t.width-(e.width+10)},function(t,e){return t.height-(e.height+10)},t)}function u(t){return n(function(t,e){return t.width-(e.width+10)},function(t,e){return 10},t)}function o(t){return n(function(t,e){return 10},function(t,e){return t.height-(e.height+10)},t)}function i(t){return n(function(t,e){return 10},function(t,e){return 10},t)}function c(t){return n(function(t,e){return(t.width-e.width)/2},function(t,e){return(t.height-e.height)/2},t)}Object.defineProperty(e,"__esModule",{value:!0}),e.atPos=n,e.lowerRight=r,e.upperRight=u,e.lowerLeft=o,e.upperLeft=i,e.center=c},function(t,e){"use strict";function n(t,e,n,r,u,o){return o||(o=1),function(i){var c=i.getContext("2d");c.save(),c.globalAlpha=o,c.fillStyle=u,c.font=r;var a=c.measureText(n);return c.fillText(n,t(i,a,c),e(i,a,c)),c.restore(),i}}function r(t,e,r,u,o){return n(function(t,e){return t.width-(e.width+10)},function(t){return o||t.height-10},t,e,r,u)}function u(t,e,r,u,o){return n(function(){return 10},function(t){return o||t.height-10},t,e,r,u)}function o(t,e,r,u,o){return n(function(t,e){return t.width-(e.width+10)},function(){return o||20},t,e,r,u)}function i(t,e,r,u,o){return n(function(){return 10},function(){return o||20},t,e,r,u)}function c(t,e,r,u,o){return n(function(t,e,n){return n.textAlign="center",t.width/2},function(t,e,n){return n.textBaseline="middle",t.height/2},t,e,r,u)}Object.defineProperty(e,"__esModule",{value:!0}),e.atPos=n,e.lowerRight=r,e.lowerLeft=u,e.upperRight=o,e.upperLeft=i,e.center=c},function(t,e){"use strict";function n(t,e){var n=Object.keys(e);return n.forEach(function(n){return t[n]=e[n]}),t}function r(t){return n({},t)}Object.defineProperty(e,"__esModule",{value:!0}),e.extend=n,e.clone=r},function(t,e){"use strict";function n(){var t=[];return{pop:function(){return 0===this.length&&t.push(document.createElement("canvas")),t.pop()},get length(){return t.length},release:function(e){var n=e.getContext("2d");n.clearRect(0,0,e.width,e.height),t.push(e)},clear:function(){t.splice(0,t.length)},get elements(){return t}}}Object.defineProperty(e,"__esModule",{value:!0}),e.CanvasPool=n;var r=n();e.default=r}])}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/examples/scripts/watermark.js b/examples/scripts/watermark.js index 052f295..6c159e2 100644 --- a/examples/scripts/watermark.js +++ b/examples/scripts/watermark.js @@ -7,977 +7,248 @@ exports["watermark"] = factory(); else root["watermark"] = factory(); -})(this, function() { +})(window, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; - +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { - +/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) +/******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; - +/******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} /******/ }; - +/******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - +/******/ /******/ // Flag the module as loaded -/******/ module.loaded = true; - +/******/ module.l = true; +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } - - +/******/ +/******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; - +/******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; - +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; - +/******/ +/******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(0); +/******/ return __webpack_require__(__webpack_require__.s = "./index.js"); /******/ }) /************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { +/******/ ({ + +/***/ "./index.js": +/*!******************!*\ + !*** ./index.js ***! + \******************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(/*! @babel/register */ \"./node_modules/@babel/register/lib/index.js\");\nmodule.exports = __webpack_require__(/*! ./lib/index */ \"./lib/index.js\").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?"); + +/***/ }), + +/***/ "./lib/blob/index.js": +/*!***************************!*\ + !*** ./lib/blob/index.js ***! + \***************************/ +/*! exports provided: split, decode, uint8, blob */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"split\", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"decode\", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"uint8\", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"blob\", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__[\"sequence\"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?"); + +/***/ }), + +/***/ "./lib/canvas/index.js": +/*!*****************************!*\ + !*** ./lib/canvas/index.js ***! + \*****************************/ +/*! exports provided: dataUrl */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dataUrl\", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?"); + +/***/ }), + +/***/ "./lib/canvas/pool.js": +/*!****************************!*\ + !*** ./lib/canvas/pool.js ***! + \****************************/ +/*! exports provided: CanvasPool, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?"); + +/***/ }), + +/***/ "./lib/functions/index.js": +/*!********************************!*\ + !*** ./lib/functions/index.js ***! + \********************************/ +/*! exports provided: sequence, identity */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sequence\", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"identity\", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?"); + +/***/ }), + +/***/ "./lib/image/index.js": +/*!****************************!*\ + !*** ./lib/image/index.js ***! + \****************************/ +/*! exports provided: getLoader, load, loadUrl, loadFile, createImage, imageToCanvas, mapToCanvas */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoader\", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"load\", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadUrl\", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFile\", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createImage\", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"imageToCanvas\", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToCanvas\", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it's type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === 'string') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === 'function' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it's onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === 'function') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?"); + +/***/ }), + +/***/ "./lib/index.js": +/*!**********************!*\ + !*** ./lib/index.js ***! + \**********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ \"./lib/image/index.js\");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ \"./lib/canvas/index.js\");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ \"./lib/blob/index.js\");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ \"./lib/style/index.js\");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ \"./lib/object/index.js\");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ \"./lib/canvas/pool.js\");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"extend\"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__[\"clone\"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result's canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__[\"dataUrl\"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__[\"load\"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__[\"mapToCanvas\"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__[\"result\"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__[\"load\"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__[\"load\"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__[\"blob\"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__[\"createImage\"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__[\"image\"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__[\"text\"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__[\"default\"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?"); + +/***/ }), + +/***/ "./lib/object/index.js": +/*!*****************************!*\ + !*** ./lib/object/index.js ***! + \*****************************/ +/*! exports provided: extend, clone */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"extend\", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"clone\", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?"); + +/***/ }), + +/***/ "./lib/style/image/index.js": +/*!**********************************!*\ + !*** ./lib/style/image/index.js ***! + \**********************************/ +/*! exports provided: atPos, lowerRight, upperRight, lowerLeft, upperLeft, center */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); + +/***/ }), + +/***/ "./lib/style/index.js": +/*!****************************!*\ + !*** ./lib/style/index.js ***! + \****************************/ +/*! exports provided: image, text, result */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"image\", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"text\", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"result\", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ \"./lib/style/image/index.js\");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ \"./lib/style/text/index.js\");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?"); + +/***/ }), + +/***/ "./lib/style/text/index.js": +/*!*********************************!*\ + !*** ./lib/style/text/index.js ***! + \*********************************/ +/*! exports provided: atPos, lowerRight, lowerLeft, upperRight, upperLeft, center */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext('2d');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = 'center';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = 'middle';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?"); - __webpack_require__(1); - module.exports = __webpack_require__(2).default; +/***/ }), +/***/ "./node_modules/@babel/register/lib/browser.js": +/*!*****************************************************!*\ + !*** ./node_modules/@babel/register/lib/browser.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { -/***/ }, -/* 1 */ -/***/ function(module, exports) { +"use strict"; +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?"); - // required to safely use babel/register within a browserify codebase +/***/ }), - "use strict"; +/***/ "./node_modules/@babel/register/lib/index.js": +/*!***************************************************!*\ + !*** ./node_modules/@babel/register/lib/index.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - exports.__esModule = true; +eval("exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ \"./node_modules/@babel/register/lib/browser.js\");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?"); - exports["default"] = function () {}; - - module.exports = exports["default"]; +/***/ }) -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = watermark; - - var _image = __webpack_require__(3); - - var _canvas = __webpack_require__(5); - - var _blob = __webpack_require__(6); - - var _style = __webpack_require__(7); - - var style = _interopRequireWildcard(_style); - - var _object = __webpack_require__(10); - - var _pool = __webpack_require__(11); - - var _pool2 = _interopRequireDefault(_pool); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - - /** - * A configuration type for the watermark function - * - * @typedef {Object} Options - * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls) - * @property {Number} poolSize - number of canvas elements available for drawing, - * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored - */ - - /** - * @constant - * @type {Options} - */ - var defaults = { - init: function init() {} - }; - - /** - * Merge the given options with the defaults - * - * @param {Options} options - * @return {Options} - */ - function mergeOptions(options) { - return (0, _object.extend)((0, _object.clone)(defaults), options); - } - - /** - * Release canvases from a draw result for reuse. Returns - * the dataURL from the result's canvas - * - * @param {DrawResult} result - * @param {CanvasPool} pool - * @return {String} - */ - function release(result, pool) { - var canvas = result.canvas; - var sources = result.sources; - - var dataURL = (0, _canvas.dataUrl)(canvas); - sources.forEach(pool.release); - return dataURL; - } - - /** - * Return a watermark object - * - * - * @param {Array} resources - a collection of urls, File objects, or Image objects - * @param {Options} options - a configuration object for watermark - * @param {Promise} promise - optional - * @return {Object} - */ - function watermark(resources) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var promise = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; - - var opts = mergeOptions(options); - promise || (promise = (0, _image.load)(resources, opts.init)); - - return { - /** - * Convert the watermarked image into a dataUrl. The draw - * function is given all images as canvas elements in order - * - * @param {Function} draw - * @return {Object} - */ - - dataUrl: function dataUrl(draw) { - var promise = this.then(function (images) { - return (0, _image.mapToCanvas)(images, _pool2.default); - }).then(function (canvases) { - return style.result(draw, canvases); - }).then(function (result) { - return release(result, _pool2.default); - }); - - return watermark(resources, opts, promise); - }, - - /** - * Load additional resources - * - * @param {Array} resources - a collection of urls, File objects, or Image objects - * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls) - * @return {Object} - */ - load: function load(resources, init) { - var promise = this.then(function (resource) { - return (0, _image.load)([resource].concat(resources), init); - }); - - return watermark(resources, opts, promise); - }, - - /** - * Render the current state of the watermarked image. Useful for performing - * actions after the watermark has been applied - * - * @return {Object} - */ - render: function render() { - var promise = this.then(function (resource) { - return (0, _image.load)([resource]); - }); - - return watermark(resources, opts, promise); - }, - - /** - * Convert the watermark into a blob - * - * @param {Function} draw - * @return {Object} - */ - blob: function blob(draw) { - var promise = this.dataUrl(draw).then(_blob.blob); - - return watermark(resources, opts, promise); - }, - - /** - * Convert the watermark into an image using the given draw function - * - * @param {Function} draw - * @return {Object} - */ - image: function image(draw) { - var promise = this.dataUrl(draw).then(_image.createImage); - - return watermark(resources, opts, promise); - }, - - /** - * Delegate to the watermark promise - * - * @return {Promise} - */ - then: function then() { - for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) { - funcs[_key] = arguments[_key]; - } - - return promise.then.apply(promise, funcs); - } - }; - }; - - /** - * Style functions - */ - watermark.image = style.image; - watermark.text = style.text; - - /** - * Clean up all canvas references - */ - watermark.destroy = function () { - return _pool2.default.clear(); - }; - -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getLoader = getLoader; - exports.load = load; - exports.loadUrl = loadUrl; - exports.loadFile = loadFile; - exports.createImage = createImage; - exports.imageToCanvas = imageToCanvas; - exports.mapToCanvas = mapToCanvas; - - var _functions = __webpack_require__(4); - - function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } - - /** - * Set the src of an image object and call the resolve function - * once it has loaded - * - * @param {Image} img - * @param {String} src - * @param {Function} resolve - */ - function setAndResolve(img, src, resolve) { - img.onload = function () { - return resolve(img); - }; - img.src = src; - } - - /** - * Given a resource, return an appropriate loading function for it's type - * - * @param {String|File|Image} resource - * @return {Function} - */ - function getLoader(resource) { - var type = typeof resource === 'undefined' ? 'undefined' : _typeof(resource); - - if (type === 'string') { - return loadUrl; - } - - if (resource instanceof Image) { - return _functions.identity; - } - - return loadFile; - } - - /** - * Used for loading image resources asynchronously and maintaining - * the supplied order of arguments - * - * @param {Array} resources - a mixed array of urls, File objects, or Image objects - * @param {Function} init - called at the beginning of resource initialization - * @return {Promise} - */ - function load(resources, init) { - var promises = []; - for (var i = 0; i < resources.length; i++) { - var resource = resources[i]; - var loader = getLoader(resource); - var promise = loader(resource, init); - promises.push(promise); - } - return Promise.all(promises); - } - - /** - * Load an image by its url - * - * @param {String} url - * @param {Function} init - an optional image initializer - * @return {Promise} - */ - function loadUrl(url, init) { - var img = new Image(); - typeof init === 'function' && init(img); - return new Promise(function (resolve) { - img.onload = function () { - return resolve(img); - }; - img.src = url; - }); - } - - /** - * Return a collection of images from an - * array of File objects - * - * @param {File} file - * @return {Promise} - */ - function loadFile(file) { - var reader = new FileReader(); - return new Promise(function (resolve) { - var img = new Image(); - reader.onloadend = function () { - return setAndResolve(img, reader.result, resolve); - }; - reader.readAsDataURL(file); - }); - } - - /** - * Create a new image, optionally configuring it's onload behavior - * - * @param {String} url - * @param {Function} onload - * @return {Image} - */ - function createImage(url, onload) { - var img = new Image(); - if (typeof onload === 'function') { - img.onload = onload; - } - img.src = url; - return img; - } - - /** - * Draw an image to a canvas element - * - * @param {Image} img - * @param {HTMLCanvasElement} canvas - * @return {HTMLCanvasElement} - */ - function drawImage(img, canvas) { - var ctx = canvas.getContext('2d'); - - canvas.width = img.width; - canvas.height = img.height; - ctx.drawImage(img, 0, 0); - return canvas; - } - - /** - * Convert an Image object to a canvas - * - * @param {Image} img - * @param {CanvasPool} pool - * @return {HTMLCanvasElement} - */ - function imageToCanvas(img, pool) { - var canvas = pool.pop(); - return drawImage(img, canvas); - } - - /** - * Convert an array of image objects - * to canvas elements - * - * @param {Array} images - * @param {CanvasPool} pool - * @return {HTMLCanvasElement[]} - */ - function mapToCanvas(images, pool) { - return images.map(function (img) { - return imageToCanvas(img, pool); - }); - } - -/***/ }, -/* 4 */ -/***/ function(module, exports) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.sequence = sequence; - exports.identity = identity; - /** - * Return a function that executes a sequence of functions from left to right, - * passing the result of a previous operation to the next - * - * @param {...funcs} - * @return {Function} - */ - function sequence() { - for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) { - funcs[_key] = arguments[_key]; - } - - return function (value) { - return funcs.reduce(function (val, fn) { - return fn.call(null, val); - }, value); - }; - } - - /** - * Return the argument passed to it - * - * @param {Mixed} x - * @return {Mixed} - */ - function identity(x) { - return x; - } - -/***/ }, -/* 5 */ -/***/ function(module, exports) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.dataUrl = dataUrl; - /** - * Get the data url of a canvas - * - * @param {HTMLCanvasElement} - * @return {String} - */ - function dataUrl(canvas) { - return canvas.toDataURL(); - } - -/***/ }, -/* 6 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.blob = undefined; - exports.split = split; - exports.decode = decode; - exports.uint8 = uint8; - - var _functions = __webpack_require__(4); - - var url = /^data:([^;]+);base64,(.*)$/; - - /** - * Split a data url into a content type and raw data - * - * @param {String} dataUrl - * @return {Array} - */ - function split(dataUrl) { - return url.exec(dataUrl).slice(1); - } - - /** - * Decode a base64 string - * - * @param {String} base64 - * @return {String} - */ - function decode(base64) { - return window.atob(base64); - } - - /** - * Return a string of raw data as a Uint8Array - * - * @param {String} data - * @return {UInt8Array} - */ - function uint8(data) { - var length = data.length; - var uints = new Uint8Array(length); - - for (var i = 0; i < length; i++) { - uints[i] = data.charCodeAt(i); - } - - return uints; - } - - /** - * Turns a data url into a blob object - * - * @param {String} dataUrl - * @return {Blob} - */ - var blob = exports.blob = (0, _functions.sequence)(split, function (parts) { - return [decode(parts[1]), parts[0]]; - }, function (blob) { - return new Blob([uint8(blob[0])], { type: blob[1] }); - }); - -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.text = exports.image = undefined; - exports.result = result; - - var _image = __webpack_require__(8); - - var img = _interopRequireWildcard(_image); - - var _text = __webpack_require__(9); - - var txt = _interopRequireWildcard(_text); - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - - /** - * @typedef {Object} DrawResult - * @property {HTMLCanvasElement} canvas - the end result of a draw - * @property {HTMLCanvasElement[]} sources - the sources used in the draw - */ - - var image = exports.image = img; - var text = exports.text = txt; - - /** - * Create a DrawResult by apply a list of canvas elements to a draw function - * - * @param {Function} draw - the draw function used to create a DrawResult - * @param {HTMLCanvasElement} sources - the canvases used by the draw function - * @return {DrawResult} - */ - function result(draw, sources) { - var canvas = draw.apply(null, sources); - return { - canvas: canvas, - sources: sources - }; - } - -/***/ }, -/* 8 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.atPos = atPos; - exports.lowerRight = lowerRight; - exports.upperRight = upperRight; - exports.lowerLeft = lowerLeft; - exports.upperLeft = upperLeft; - exports.center = center; - /** - * Return a function for positioning a watermark on a target canvas - * - * @param {Function} xFn - a function to determine an x value - * @param {Function} yFn - a function to determine a y value - * @param {Number} alpha - * @return {Function} - */ - function atPos(xFn, yFn, alpha) { - alpha || (alpha = 1.0); - return function (target, watermark) { - var context = target.getContext('2d'); - context.save(); - - context.globalAlpha = alpha; - context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark)); - - context.restore(); - return target; - }; - } - - /** - * Place the watermark in the lower right corner of the target - * image - * - * @param {Number} alpha - * @return {Function} - */ - function lowerRight(alpha) { - return atPos(function (target, mark) { - return target.width - (mark.width + 10); - }, function (target, mark) { - return target.height - (mark.height + 10); - }, alpha); - } - - /** - * Place the watermark in the upper right corner of the target - * image - * - * @param {Number} alpha - * @return {Function} - */ - function upperRight(alpha) { - return atPos(function (target, mark) { - return target.width - (mark.width + 10); - }, function (target, mark) { - return 10; - }, alpha); - } - - /** - * Place the watermark in the lower left corner of the target - * image - * - * @param {Number} alpha - * @return {Function} - */ - function lowerLeft(alpha) { - return atPos(function (target, mark) { - return 10; - }, function (target, mark) { - return target.height - (mark.height + 10); - }, alpha); - } - - /** - * Place the watermark in the upper left corner of the target - * image - * - * @param {Number} alpha - * @return {Function} - */ - function upperLeft(alpha) { - return atPos(function (target, mark) { - return 10; - }, function (target, mark) { - return 10; - }, alpha); - } - - /** - * Place the watermark in the center of the target - * image - * - * @param {Number} alpha - * @return {Function} - */ - function center(alpha) { - return atPos(function (target, mark) { - return (target.width - mark.width) / 2; - }, function (target, mark) { - return (target.height - mark.height) / 2; - }, alpha); - } - -/***/ }, -/* 9 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.atPos = atPos; - exports.lowerRight = lowerRight; - exports.lowerLeft = lowerLeft; - exports.upperRight = upperRight; - exports.upperLeft = upperLeft; - exports.center = center; - /** - * Return a function for positioning a watermark on a target canvas - * - * @param {Function} xFn - a function to determine an x value - * @param {Function} yFn - a function to determine a y value - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - * @return {Function} - */ - function atPos(xFn, yFn, text, font, fillStyle, alpha) { - alpha || (alpha = 1.0); - return function (target) { - var context = target.getContext('2d'); - context.save(); - - context.globalAlpha = alpha; - context.fillStyle = fillStyle; - context.font = font; - var metrics = context.measureText(text); - context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context)); - - context.restore(); - return target; - }; - } - - /** - * Write text to the lower right corner of the target canvas - * - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - control text transparency - * @param {Number} y - height in text metrics is not very well supported. This is a manual value - * @return {Function} - */ - function lowerRight(text, font, fillStyle, alpha, y) { - return atPos(function (target, metrics) { - return target.width - (metrics.width + 10); - }, function (target) { - return y || target.height - 10; - }, text, font, fillStyle, alpha); - } - - /** - * Write text to the lower left corner of the target canvas - * - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - control text transparency - * @param {Number} y - height in text metrics is not very well supported. This is a manual value - * @return {Function} - */ - function lowerLeft(text, font, fillStyle, alpha, y) { - return atPos(function () { - return 10; - }, function (target) { - return y || target.height - 10; - }, text, font, fillStyle, alpha); - } - - /** - * Write text to the upper right corner of the target canvas - * - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - control text transparency - * @param {Number} y - height in text metrics is not very well supported. This is a manual value - * @return {Function} - */ - function upperRight(text, font, fillStyle, alpha, y) { - return atPos(function (target, metrics) { - return target.width - (metrics.width + 10); - }, function () { - return y || 20; - }, text, font, fillStyle, alpha); - } - - /** - * Write text to the upper left corner of the target canvas - * - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - control text transparency - * @param {Number} y - height in text metrics is not very well supported. This is a manual value - * @return {Function} - */ - function upperLeft(text, font, fillStyle, alpha, y) { - return atPos(function () { - return 10; - }, function () { - return y || 20; - }, text, font, fillStyle, alpha); - } - - /** - * Write text to the center of the target canvas - * - * @param {String} text - the text to write - * @param {String} font - same as the CSS font property - * @param {String} fillStyle - * @param {Number} alpha - control text transparency - * @param {Number} y - height in text metrics is not very well supported. This is a manual value - * @return {Function} - */ - function center(text, font, fillStyle, alpha, y) { - return atPos(function (target, metrics, ctx) { - ctx.textAlign = 'center';return target.width / 2; - }, function (target, metrics, ctx) { - ctx.textBaseline = 'middle';return target.height / 2; - }, text, font, fillStyle, alpha); - } - -/***/ }, -/* 10 */ -/***/ function(module, exports) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.extend = extend; - exports.clone = clone; - /** - * Extend one object with the properties of another - * - * @param {Object} first - * @param {Object} second - * @return {Object} - */ - function extend(first, second) { - var secondKeys = Object.keys(second); - secondKeys.forEach(function (key) { - return first[key] = second[key]; - }); - return first; - } - - /** - * Create a shallow copy of the object - * - * @param {Object} obj - * @return {Object} - */ - function clone(obj) { - return extend({}, obj); - } - -/***/ }, -/* 11 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.CanvasPool = CanvasPool; - /** - * An immutable canvas pool allowing more efficient use of canvas resources - * - * @typedef {Object} CanvasPool - * @property {Function} pop - return a promise that will evaluate to a canvas - * @property {Number} length - the number of available canvas elements - * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool - * @property {Function} clear - empty the pool of canvas elements - * @property {Function} release - free a pool up for release and return the data url - */ - - /** - * Create a CanvasPool with the given size - * - * @param {Number} size - * @param {HTMLCanvasElement[]} elements - * @param {EventEmitter} eventEmitter - * @return {CanvasPool} - */ - function CanvasPool() { - var canvases = []; - - return { - /** - * Get the next available canvas from the pool - * - * @return {HTMLCanvasElement} - */ - - pop: function pop() { - if (this.length === 0) { - canvases.push(document.createElement('canvas')); - } - - return canvases.pop(); - }, - - /** - * Return the number of available canvas elements in the pool - * - * @return {Number} - */ - get length() { - return canvases.length; - }, - - /** - * Return a canvas to the pool. This function will clear the canvas for reuse - * - * @param {HTMLCanvasElement} canvas - * @return {String} - */ - release: function release(canvas) { - var context = canvas.getContext('2d'); - context.clearRect(0, 0, canvas.width, canvas.height); - canvases.push(canvas); - }, - - /** - * Empty the pool, destroying any references to canvas objects - */ - clear: function clear() { - canvases.splice(0, canvases.length); - }, - - /** - * Return the collection of canvases in the pool - * - * @return {HTMLCanvasElement[]} - */ - get elements() { - return canvases; - } - }; - } - - var shared = CanvasPool(); - exports.default = shared; - -/***/ } -/******/ ]) -}); -; \ No newline at end of file +/******/ }); +}); \ No newline at end of file diff --git a/examples/scripts/watermark.min.js b/examples/scripts/watermark.min.js index bee377a..2eceddf 100644 --- a/examples/scripts/watermark.min.js +++ b/examples/scripts/watermark.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():t.watermark=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var u=n[r]={exports:{},id:r,loaded:!1};return t[r].call(u.exports,u,u.exports,e),u.loaded=!0,u.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){n(1),t.exports=n(2).default},function(t,e){"use strict";e.__esModule=!0,e.default=function(){},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function u(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t){return(0,h.extend)((0,h.clone)(v),t)}function i(t,e){var n=t.canvas,r=t.sources,u=(0,f.dataUrl)(n);return r.forEach(e.release),u}function c(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n=arguments.length<=2||void 0===arguments[2]?null:arguments[2],r=o(e);return n||(n=(0,a.load)(t,r.init)),{dataUrl:function(e){var n=this.then(function(t){return(0,a.mapToCanvas)(t,g.default)}).then(function(t){return d.result(e,t)}).then(function(t){return i(t,g.default)});return c(t,r,n)},load:function(t,e){var n=this.then(function(n){return(0,a.load)([n].concat(t),e)});return c(t,r,n)},render:function(){var e=this.then(function(t){return(0,a.load)([t])});return c(t,r,e)},blob:function(e){var n=this.dataUrl(e).then(l.blob);return c(t,r,n)},image:function(e){var n=this.dataUrl(e).then(a.createImage);return c(t,r,n)},then:function(){for(var t=arguments.length,e=Array(t),r=0;t>r;r++)e[r]=arguments[r];return n.then.apply(n,e)}}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=c;var a=n(3),f=n(5),l=n(6),s=n(7),d=u(s),h=n(10),p=n(11),g=r(p),v={init:function(){}};c.image=d.image,c.text=d.text,c.destroy=function(){return g.default.clear()}},function(t,e,n){"use strict";function r(t){return t&&"undefined"!=typeof Symbol&&t.constructor===Symbol?"symbol":typeof t}function u(t,e,n){t.onload=function(){return n(t)},t.src=e}function o(t){var e="undefined"==typeof t?"undefined":r(t);return"string"===e?c:t instanceof Image?h.identity:a}function i(t,e){for(var n=[],r=0;rn;n++)e[n]=arguments[n];return function(t){return e.reduce(function(t,e){return e.call(null,t)},t)}}function r(t){return t}Object.defineProperty(e,"__esModule",{value:!0}),e.sequence=n,e.identity=r},function(t,e){"use strict";function n(t){return t.toDataURL()}Object.defineProperty(e,"__esModule",{value:!0}),e.dataUrl=n},function(t,e,n){"use strict";function r(t){return c.exec(t).slice(1)}function u(t){return window.atob(t)}function o(t){for(var e=t.length,n=new Uint8Array(e),r=0;e>r;r++)n[r]=t.charCodeAt(r);return n}Object.defineProperty(e,"__esModule",{value:!0}),e.blob=void 0,e.split=r,e.decode=u,e.uint8=o;var i=n(4),c=/^data:([^;]+);base64,(.*)$/;e.blob=(0,i.sequence)(r,function(t){return[u(t[1]),t[0]]},function(t){return new Blob([o(t[0])],{type:t[1]})})},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function u(t,e){var n=t.apply(null,e);return{canvas:n,sources:e}}Object.defineProperty(e,"__esModule",{value:!0}),e.text=e.image=void 0,e.result=u;var o=n(8),i=r(o),c=n(9),a=r(c);e.image=i,e.text=a},function(t,e){"use strict";function n(t,e,n){return n||(n=1),function(r,u){var o=r.getContext("2d");return o.save(),o.globalAlpha=n,o.drawImage(u,t(r,u),e(r,u)),o.restore(),r}}function r(t){return n(function(t,e){return t.width-(e.width+10)},function(t,e){return t.height-(e.height+10)},t)}function u(t){return n(function(t,e){return t.width-(e.width+10)},function(t,e){return 10},t)}function o(t){return n(function(t,e){return 10},function(t,e){return t.height-(e.height+10)},t)}function i(t){return n(function(t,e){return 10},function(t,e){return 10},t)}function c(t){return n(function(t,e){return(t.width-e.width)/2},function(t,e){return(t.height-e.height)/2},t)}Object.defineProperty(e,"__esModule",{value:!0}),e.atPos=n,e.lowerRight=r,e.upperRight=u,e.lowerLeft=o,e.upperLeft=i,e.center=c},function(t,e){"use strict";function n(t,e,n,r,u,o){return o||(o=1),function(i){var c=i.getContext("2d");c.save(),c.globalAlpha=o,c.fillStyle=u,c.font=r;var a=c.measureText(n);return c.fillText(n,t(i,a,c),e(i,a,c)),c.restore(),i}}function r(t,e,r,u,o){return n(function(t,e){return t.width-(e.width+10)},function(t){return o||t.height-10},t,e,r,u)}function u(t,e,r,u,o){return n(function(){return 10},function(t){return o||t.height-10},t,e,r,u)}function o(t,e,r,u,o){return n(function(t,e){return t.width-(e.width+10)},function(){return o||20},t,e,r,u)}function i(t,e,r,u,o){return n(function(){return 10},function(){return o||20},t,e,r,u)}function c(t,e,r,u,o){return n(function(t,e,n){return n.textAlign="center",t.width/2},function(t,e,n){return n.textBaseline="middle",t.height/2},t,e,r,u)}Object.defineProperty(e,"__esModule",{value:!0}),e.atPos=n,e.lowerRight=r,e.lowerLeft=u,e.upperRight=o,e.upperLeft=i,e.center=c},function(t,e){"use strict";function n(t,e){var n=Object.keys(e);return n.forEach(function(n){return t[n]=e[n]}),t}function r(t){return n({},t)}Object.defineProperty(e,"__esModule",{value:!0}),e.extend=n,e.clone=r},function(t,e){"use strict";function n(){var t=[];return{pop:function(){return 0===this.length&&t.push(document.createElement("canvas")),t.pop()},get length(){return t.length},release:function(e){var n=e.getContext("2d");n.clearRect(0,0,e.width,e.height),t.push(e)},clear:function(){t.splice(0,t.length)},get elements(){return t}}}Object.defineProperty(e,"__esModule",{value:!0}),e.CanvasPool=n;var r=n();e.default=r}])}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ba1e625..2300b30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1950,6 +1950,24 @@ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", "dev": true }, + "airbnb-prop-types": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz", + "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==", + "dev": true, + "requires": { + "array.prototype.find": "^2.1.0", + "function.prototype.name": "^1.1.1", + "has": "^1.0.3", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.1.0", + "prop-types": "^15.7.2", + "prop-types-exact": "^1.2.0", + "react-is": "^16.9.0" + } + }, "ajv": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", @@ -2064,6 +2082,16 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "array.prototype.find": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", + "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.13.0" + } + }, "array.prototype.flat": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", @@ -4301,6 +4329,36 @@ "string.prototype.trim": "^1.1.2" } }, + "enzyme-adapter-react-16": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.14.0.tgz", + "integrity": "sha512-7PcOF7pb4hJUvjY7oAuPGpq3BmlCig3kxXGi2kFx0YzJHppqX1K8IIV9skT1IirxXlu8W7bneKi+oQ10QRnhcA==", + "dev": true, + "requires": { + "enzyme-adapter-utils": "^1.12.0", + "has": "^1.0.3", + "object.assign": "^4.1.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.2", + "react-is": "^16.8.6", + "react-test-renderer": "^16.0.0-0", + "semver": "^5.7.0" + } + }, + "enzyme-adapter-utils": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.0.tgz", + "integrity": "sha512-wkZvE0VxcFx/8ZsBw0iAbk3gR1d9hK447ebnSYBf95+r32ezBq+XDSAvRErkc4LZosgH8J7et7H7/7CtUuQfBA==", + "dev": true, + "requires": { + "airbnb-prop-types": "^2.13.2", + "function.prototype.name": "^1.1.0", + "object.assign": "^4.1.0", + "object.fromentries": "^2.0.0", + "prop-types": "^15.7.2", + "semver": "^5.6.0" + } + }, "enzyme-to-json": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.4.0.tgz", @@ -8971,6 +9029,18 @@ "has": "^1.0.3" } }, + "object.fromentries": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", + "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.11.0", + "function-bind": "^1.1.1", + "has": "^1.0.1" + } + }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", @@ -9492,6 +9562,28 @@ "sisteransi": "^1.0.3" } }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "prop-types-exact": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", + "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", + "dev": true, + "requires": { + "has": "^1.0.3", + "object.assign": "^4.1.0", + "reflect.ownkeys": "^0.2.0" + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -9643,6 +9735,18 @@ "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==", "dev": true }, + "react-test-renderer": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.9.0.tgz", + "integrity": "sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "react-is": "^16.9.0", + "scheduler": "^0.15.0" + } + }, "read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", @@ -9716,6 +9820,12 @@ "util.promisify": "^1.0.0" } }, + "reflect.ownkeys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", + "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", + "dev": true + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -10082,6 +10192,16 @@ "xmlchars": "^2.1.1" } }, + "scheduler": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", + "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -11342,7 +11462,6 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", "dev": true, - "optional": true, "requires": { "commander": "~2.20.0", "source-map": "~0.6.1" @@ -11352,8 +11471,32 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true + "dev": true + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz", + "integrity": "sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "uglify-js": "^3.6.0", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, diff --git a/package.json b/package.json index ff15413..af6eb32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "watermarkjs", - "version": "2.0.0", + "version": "2.0.1", "description": "Watermarked images in the browser", "main": "dist/watermark.js", "scripts": { @@ -48,6 +48,7 @@ "enzyme-to-json": "^3.4.0", "jest-cli": "^25.0.0", "node-notify": "^1.0.0", + "uglifyjs-webpack-plugin": "^2.2.0", "watch": "^1.0.2", "webpack": "^4.40.2", "webpack-cli": "^3.3.9" diff --git a/webpack.config.js b/webpack.config.js index cd3b2b9..300ab5f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,7 +1,9 @@ const path = require('path'); +const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); module.exports = { entry: "./index", + mode: 'development', output: { path: __dirname + "/dist", filename: "watermark.js", @@ -9,7 +11,7 @@ module.exports = { libraryTarget: "umd" }, module: { - loaders: [ + rules: [ { test: /\.js$/, loader: 'babel-loader', From 4d7de88adef712a8afa5175edfe1413c663f261f Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Tue, 17 Sep 2019 16:51:33 -0300 Subject: [PATCH 03/15] update package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index af6eb32..a5603ce 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ }, "repository": { "type": "git", - "url": "git@github.com:brianium/watermarkjs.git" + "url": "git@github.com:mateusmoura/watermarkjs.git" }, "keywords": [ "canvas", @@ -29,9 +29,9 @@ "author": "Brian Scaturro ", "license": "MIT", "bugs": { - "url": "https://github.com/brianium/watermarkjs/issues" + "url": "https://github.com/mateusmoura/watermarkjs/issues" }, - "homepage": "https://github.com/brianium/watermarkjs", + "homepage": "https://github.com/mateusmoura/watermarkjs", "devDependencies": { "@babel/polyfill": "^7.4.4", "@babel/preset-env": "^7.5.5", From 4fa3011ddc338e09f7ee72c45168ee04bd9edf90 Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 17:40:15 -0300 Subject: [PATCH 04/15] Add style to scale watermark --- dist/watermark.js | 2 +- dist/watermark.min.js | 2 +- examples/scripts/watermark.js | 2 +- examples/scripts/watermark.min.js | 2 +- lib/blob/__tests__/blob-test.js | 1 - lib/style/image/index.js | 6 +++++- 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/dist/watermark.js b/dist/watermark.js index 6c159e2..1161476 100644 --- a/dist/watermark.js +++ b/dist/watermark.js @@ -163,7 +163,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoader\", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"load\", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadUrl\", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFile\", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createImage\", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"imageToCanvas\", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToCanvas\", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it's type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === 'string') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === 'function' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it's onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === 'function') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoader\", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"load\", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadUrl\", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFile\", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createImage\", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"imageToCanvas\", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToCanvas\", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it's type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === 'string') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === 'function' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it's onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === 'function') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext('2d');\n console.log('img.width', img.width);\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?"); /***/ }), diff --git a/dist/watermark.min.js b/dist/watermark.min.js index 2eceddf..f7c6480 100644 --- a/dist/watermark.min.js +++ b/dist/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n console.log(\'img.width\', img.width);\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/examples/scripts/watermark.js b/examples/scripts/watermark.js index 6c159e2..1161476 100644 --- a/examples/scripts/watermark.js +++ b/examples/scripts/watermark.js @@ -163,7 +163,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoader\", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"load\", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadUrl\", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFile\", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createImage\", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"imageToCanvas\", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToCanvas\", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it's type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === 'string') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === 'function' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it's onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === 'function') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoader\", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"load\", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadUrl\", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFile\", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createImage\", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"imageToCanvas\", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToCanvas\", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it's type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === 'string') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === 'function' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it's onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === 'function') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext('2d');\n console.log('img.width', img.width);\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?"); /***/ }), diff --git a/examples/scripts/watermark.min.js b/examples/scripts/watermark.min.js index 2eceddf..f7c6480 100644 --- a/examples/scripts/watermark.min.js +++ b/examples/scripts/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n console.log(\'img.width\', img.width);\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/lib/blob/__tests__/blob-test.js b/lib/blob/__tests__/blob-test.js index 23f6077..e75396d 100644 --- a/lib/blob/__tests__/blob-test.js +++ b/lib/blob/__tests__/blob-test.js @@ -12,7 +12,6 @@ describe('blobs', function () { it('can decode base64 content', function () { const parts = split(testUrl); const decoded = decode(parts[1]); - console.log('parts', parts) expect(decoded).toEqual(atob(parts[1])); }); diff --git a/lib/style/image/index.js b/lib/style/image/index.js index e137681..20292f1 100644 --- a/lib/style/image/index.js +++ b/lib/style/image/index.js @@ -6,12 +6,16 @@ * @param {Number} alpha * @return {Function} */ -export function atPos(xFn, yFn, alpha) { +export function atPos(xFn, yFn, alpha, scale) { alpha || (alpha = 1.0); return function (target, watermark) { const context = target.getContext('2d'); context.save(); + if (scale) { + context.scale(scale); + } + context.globalAlpha = alpha; context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark)); From dcd53b9537b1eab5f6ab6a8120f016c5b7d3640c Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 17:46:06 -0300 Subject: [PATCH 05/15] New version to prod --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a5603ce..e8bcd85 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "watermarkjs", - "version": "2.0.1", + "version": "2.0.2", "description": "Watermarked images in the browser", "main": "dist/watermark.js", "scripts": { From 4f1c81fe522d7f0484c558951183a597b1bde8cd Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 17:55:12 -0300 Subject: [PATCH 06/15] args adjusts --- lib/style/image/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/style/image/index.js b/lib/style/image/index.js index 20292f1..c01246d 100644 --- a/lib/style/image/index.js +++ b/lib/style/image/index.js @@ -13,7 +13,7 @@ export function atPos(xFn, yFn, alpha, scale) { context.save(); if (scale) { - context.scale(scale); + context.scale(scale.width, scale.height); } context.globalAlpha = alpha; From dea6a13cefc53cb51dbb17f35dd311a5c3e6ce00 Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 17:56:10 -0300 Subject: [PATCH 07/15] update version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a5603ce..e8bcd85 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "watermarkjs", - "version": "2.0.1", + "version": "2.0.2", "description": "Watermarked images in the browser", "main": "dist/watermark.js", "scripts": { From bb4376914d0c2d20f0c905cb90824815b1a674d9 Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 17:57:38 -0300 Subject: [PATCH 08/15] update dist folder --- dist/watermark.js | 4 ++-- dist/watermark.min.js | 2 +- examples/scripts/watermark.js | 4 ++-- examples/scripts/watermark.min.js | 2 +- package-lock.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dist/watermark.js b/dist/watermark.js index 1161476..10b8fc4 100644 --- a/dist/watermark.js +++ b/dist/watermark.js @@ -163,7 +163,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoader\", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"load\", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadUrl\", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFile\", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createImage\", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"imageToCanvas\", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToCanvas\", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it's type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === 'string') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === 'function' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it's onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === 'function') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext('2d');\n console.log('img.width', img.width);\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoader\", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"load\", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadUrl\", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFile\", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createImage\", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"imageToCanvas\", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToCanvas\", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it's type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === 'string') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === 'function' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it's onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === 'function') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?"); /***/ }), @@ -199,7 +199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n context.save();\n\n if (scale) {\n context.scale(scale.width, scale.height);\n }\n\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); /***/ }), diff --git a/dist/watermark.min.js b/dist/watermark.min.js index f7c6480..0b8d925 100644 --- a/dist/watermark.min.js +++ b/dist/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n console.log(\'img.width\', img.width);\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n\n if (scale) {\n context.scale(scale.width, scale.height);\n }\n\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/examples/scripts/watermark.js b/examples/scripts/watermark.js index 1161476..10b8fc4 100644 --- a/examples/scripts/watermark.js +++ b/examples/scripts/watermark.js @@ -163,7 +163,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoader\", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"load\", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadUrl\", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFile\", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createImage\", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"imageToCanvas\", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToCanvas\", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it's type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === 'string') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === 'function' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it's onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === 'function') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext('2d');\n console.log('img.width', img.width);\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoader\", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"load\", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadUrl\", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFile\", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createImage\", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"imageToCanvas\", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToCanvas\", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ \"./lib/functions/index.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it's type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === 'string') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === 'function' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it's onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === 'function') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?"); /***/ }), @@ -199,7 +199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n context.save();\n\n if (scale) {\n context.scale(scale.width, scale.height);\n }\n\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); /***/ }), diff --git a/examples/scripts/watermark.min.js b/examples/scripts/watermark.min.js index f7c6480..0b8d925 100644 --- a/examples/scripts/watermark.min.js +++ b/examples/scripts/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n console.log(\'img.width\', img.width);\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n\n if (scale) {\n context.scale(scale.width, scale.height);\n }\n\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2300b30..1b1855a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "watermarkjs", - "version": "2.0.0", + "version": "2.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { From c9acb6725de4e1c830a29a42e0fdb4792e6b4bc0 Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 18:23:37 -0300 Subject: [PATCH 09/15] style edit width and height of watermark --- lib/style/image/index.js | 19 +++++++++++++++---- package.json | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/style/image/index.js b/lib/style/image/index.js index c01246d..a67a696 100644 --- a/lib/style/image/index.js +++ b/lib/style/image/index.js @@ -10,14 +10,25 @@ export function atPos(xFn, yFn, alpha, scale) { alpha || (alpha = 1.0); return function (target, watermark) { const context = target.getContext('2d'); - context.save(); + const width = (target, watermark) => { + if (scale.width) { + return scale.width(target, watermark); + } - if (scale) { - context.scale(scale.width, scale.height); + return target.width; } + const height = () => { + if (scale.height) { + return scale.height(target, watermark); + } + + return target.height; + } + context.save(); + context.globalAlpha = alpha; - context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark)); + context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark)); context.restore(); return target; diff --git a/package.json b/package.json index e8bcd85..4258136 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "watermarkjs", - "version": "2.0.2", + "version": "2.0.3", "description": "Watermarked images in the browser", "main": "dist/watermark.js", "scripts": { From b4e605350e722a16e645b0d3981a10dd837d3c0d Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 18:32:40 -0300 Subject: [PATCH 10/15] Update dist files --- dist/watermark.js | 2 +- dist/watermark.min.js | 2 +- examples/scripts/watermark.js | 2 +- examples/scripts/watermark.min.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/watermark.js b/dist/watermark.js index 10b8fc4..e5c97ef 100644 --- a/dist/watermark.js +++ b/dist/watermark.js @@ -199,7 +199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n context.save();\n\n if (scale) {\n context.scale(scale.width, scale.height);\n }\n\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height() {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); /***/ }), diff --git a/dist/watermark.min.js b/dist/watermark.min.js index 0b8d925..cd461b2 100644 --- a/dist/watermark.min.js +++ b/dist/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n\n if (scale) {\n context.scale(scale.width, scale.height);\n }\n\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height() {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/examples/scripts/watermark.js b/examples/scripts/watermark.js index 10b8fc4..e5c97ef 100644 --- a/examples/scripts/watermark.js +++ b/examples/scripts/watermark.js @@ -199,7 +199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n context.save();\n\n if (scale) {\n context.scale(scale.width, scale.height);\n }\n\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height() {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); /***/ }), diff --git a/examples/scripts/watermark.min.js b/examples/scripts/watermark.min.js index 0b8d925..cd461b2 100644 --- a/examples/scripts/watermark.min.js +++ b/examples/scripts/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n context.save();\n\n if (scale) {\n context.scale(scale.width, scale.height);\n }\n\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height() {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file From 3effe4a0c5c540d41702314168e94e0b938f088d Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 18:36:37 -0300 Subject: [PATCH 11/15] update dist files --- dist/watermark.js | 2 +- dist/watermark.min.js | 2 +- examples/scripts/watermark.js | 2 +- examples/scripts/watermark.min.js | 2 +- lib/style/image/index.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/watermark.js b/dist/watermark.js index e5c97ef..4f6e4b2 100644 --- a/dist/watermark.js +++ b/dist/watermark.js @@ -199,7 +199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height() {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); /***/ }), diff --git a/dist/watermark.min.js b/dist/watermark.min.js index cd461b2..263b7e6 100644 --- a/dist/watermark.min.js +++ b/dist/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height() {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/examples/scripts/watermark.js b/examples/scripts/watermark.js index e5c97ef..4f6e4b2 100644 --- a/examples/scripts/watermark.js +++ b/examples/scripts/watermark.js @@ -199,7 +199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height() {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); /***/ }), diff --git a/examples/scripts/watermark.min.js b/examples/scripts/watermark.min.js index cd461b2..263b7e6 100644 --- a/examples/scripts/watermark.min.js +++ b/examples/scripts/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height() {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/lib/style/image/index.js b/lib/style/image/index.js index a67a696..630fa9e 100644 --- a/lib/style/image/index.js +++ b/lib/style/image/index.js @@ -18,7 +18,7 @@ export function atPos(xFn, yFn, alpha, scale) { return target.width; } - const height = () => { + const height = (target, watermark) => { if (scale.height) { return scale.height(target, watermark); } From 232c2368acca04dabd919296e9e1e07a8bb6ac6e Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 18:49:48 -0300 Subject: [PATCH 12/15] fix logic style images --- lib/style/image/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/style/image/index.js b/lib/style/image/index.js index 630fa9e..82f6f90 100644 --- a/lib/style/image/index.js +++ b/lib/style/image/index.js @@ -6,7 +6,7 @@ * @param {Number} alpha * @return {Function} */ -export function atPos(xFn, yFn, alpha, scale) { +export function atPos(xFn, yFn, alpha, scale = {}) { alpha || (alpha = 1.0); return function (target, watermark) { const context = target.getContext('2d'); From 5a62410d0463834a51085d1bc3b2a22550320d34 Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 18:50:02 -0300 Subject: [PATCH 13/15] update files --- dist/watermark.js | 2 +- dist/watermark.min.js | 2 +- examples/scripts/watermark.js | 2 +- examples/scripts/watermark.min.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/watermark.js b/dist/watermark.js index 4f6e4b2..5c8eb2e 100644 --- a/dist/watermark.js +++ b/dist/watermark.js @@ -199,7 +199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); /***/ }), diff --git a/dist/watermark.min.js b/dist/watermark.min.js index 263b7e6..c9b325f 100644 --- a/dist/watermark.min.js +++ b/dist/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/examples/scripts/watermark.js b/examples/scripts/watermark.js index 4f6e4b2..5c8eb2e 100644 --- a/examples/scripts/watermark.js +++ b/examples/scripts/watermark.js @@ -199,7 +199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); /***/ }), diff --git a/examples/scripts/watermark.min.js b/examples/scripts/watermark.min.js index 263b7e6..c9b325f 100644 --- a/examples/scripts/watermark.min.js +++ b/examples/scripts/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha, scale) {\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file From bdad3992c0c92e962b88a611c4251301d3e62d77 Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 18:58:01 -0300 Subject: [PATCH 14/15] change to use watermark width and height default --- lib/style/image/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/style/image/index.js b/lib/style/image/index.js index 82f6f90..2420040 100644 --- a/lib/style/image/index.js +++ b/lib/style/image/index.js @@ -15,7 +15,7 @@ export function atPos(xFn, yFn, alpha, scale = {}) { return scale.width(target, watermark); } - return target.width; + return watermark.width; } const height = (target, watermark) => { @@ -23,7 +23,7 @@ export function atPos(xFn, yFn, alpha, scale = {}) { return scale.height(target, watermark); } - return target.height; + return watermark.height; } context.save(); From d7c11572b4d0e042975675873bbc653e15bafa6d Mon Sep 17 00:00:00 2001 From: Mateus Moura Date: Mon, 23 Sep 2019 18:58:22 -0300 Subject: [PATCH 15/15] update dist files --- dist/watermark.js | 2 +- dist/watermark.min.js | 2 +- examples/scripts/watermark.js | 2 +- examples/scripts/watermark.min.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/watermark.js b/dist/watermark.js index 5c8eb2e..01248fc 100644 --- a/dist/watermark.js +++ b/dist/watermark.js @@ -199,7 +199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return watermark.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return watermark.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); /***/ }), diff --git a/dist/watermark.min.js b/dist/watermark.min.js index c9b325f..b787726 100644 --- a/dist/watermark.min.js +++ b/dist/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return watermark.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return watermark.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file diff --git a/examples/scripts/watermark.js b/examples/scripts/watermark.js index 5c8eb2e..01248fc 100644 --- a/examples/scripts/watermark.js +++ b/examples/scripts/watermark.js @@ -199,7 +199,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"atPos\", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerRight\", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperRight\", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lowerLeft\", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"upperLeft\", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"center\", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext('2d');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return watermark.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return watermark.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?"); /***/ }), diff --git a/examples/scripts/watermark.min.js b/examples/scripts/watermark.min.js index c9b325f..b787726 100644 --- a/examples/scripts/watermark.min.js +++ b/examples/scripts/watermark.min.js @@ -1 +1 @@ -!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return target.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return target.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.watermark=e():n.watermark=e()}(window,function(){return d={"./index.js":function(module,exports,__webpack_require__){eval('__webpack_require__(/*! @babel/register */ "./node_modules/@babel/register/lib/index.js");\nmodule.exports = __webpack_require__(/*! ./lib/index */ "./lib/index.js").default;\n\n\n//# sourceURL=webpack://watermark/./index.js?')},"./lib/blob/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "split", function() { return split; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8", function() { return uint8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return blob; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\n\nvar url = /^data:([^;]+);base64,(.*)$/;\n/**\n * Split a data url into a content type and raw data\n *\n * @param {String} dataUrl\n * @return {Array}\n */\n\nfunction split(dataUrl) {\n return url.exec(dataUrl).slice(1);\n}\n/**\n * Decode a base64 string\n *\n * @param {String} base64\n * @return {String}\n */\n\nfunction decode(base64) {\n return window.atob(base64);\n}\n/**\n * Return a string of raw data as a Uint8Array\n *\n * @param {String} data\n * @return {UInt8Array}\n */\n\nfunction uint8(data) {\n var length = data.length;\n var uints = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n uints[i] = data.charCodeAt(i);\n }\n\n return uints;\n}\n/**\n * Turns a data url into a blob object\n *\n * @param {String} dataUrl\n * @return {Blob}\n */\n\nvar blob = Object(_functions__WEBPACK_IMPORTED_MODULE_0__["sequence"])(split, function (parts) {\n return [decode(parts[1]), parts[0]];\n}, function (blob) {\n return new Blob([uint8(blob[0])], {\n type: blob[1]\n });\n});\n\n//# sourceURL=webpack://watermark/./lib/blob/index.js?')},"./lib/canvas/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUrl", function() { return dataUrl; });\n/**\n * Get the data url of a canvas\n *\n * @param {HTMLCanvasElement}\n * @return {String}\n */\nfunction dataUrl(canvas) {\n return canvas.toDataURL();\n}\n\n//# sourceURL=webpack://watermark/./lib/canvas/index.js?')},"./lib/canvas/pool.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanvasPool\", function() { return CanvasPool; });\n/**\n * An immutable canvas pool allowing more efficient use of canvas resources\n *\n * @typedef {Object} CanvasPool\n * @property {Function} pop - return a promise that will evaluate to a canvas\n * @property {Number} length - the number of available canvas elements\n * @property {HTMLCanvasElement[]} elements - the canvas elements used by the pool\n * @property {Function} clear - empty the pool of canvas elements\n * @property {Function} release - free a pool up for release and return the data url\n */\n\n/**\n * Create a CanvasPool with the given size\n *\n * @param {Number} size\n * @param {HTMLCanvasElement[]} elements\n * @param {EventEmitter} eventEmitter\n * @return {CanvasPool}\n */\nfunction CanvasPool() {\n var canvases = [];\n return {\n /**\n * Get the next available canvas from the pool\n *\n * @return {HTMLCanvasElement}\n */\n pop: function pop() {\n if (this.length === 0) {\n canvases.push(document.createElement('canvas'));\n }\n\n return canvases.pop();\n },\n\n /**\n * Return the number of available canvas elements in the pool\n *\n * @return {Number}\n */\n get length() {\n return canvases.length;\n },\n\n /**\n * Return a canvas to the pool. This function will clear the canvas for reuse\n *\n * @param {HTMLCanvasElement} canvas\n * @return {String}\n */\n release: function release(canvas) {\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, canvas.width, canvas.height);\n canvases.push(canvas);\n },\n\n /**\n * Empty the pool, destroying any references to canvas objects\n */\n clear: function clear() {\n canvases.splice(0, canvases.length);\n },\n\n /**\n * Return the collection of canvases in the pool\n *\n * @return {HTMLCanvasElement[]}\n */\n get elements() {\n return canvases;\n }\n\n };\n}\nvar shared = CanvasPool();\n/* harmony default export */ __webpack_exports__[\"default\"] = (shared);\n\n//# sourceURL=webpack://watermark/./lib/canvas/pool.js?")},"./lib/functions/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });\n/**\n * Return a function that executes a sequence of functions from left to right,\n * passing the result of a previous operation to the next\n *\n * @param {...funcs}\n * @return {Function}\n */\nfunction sequence() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return function (value) {\n return funcs.reduce(function (val, fn) {\n return fn.call(null, val);\n }, value);\n };\n}\n/**\n * Return the argument passed to it\n *\n * @param {Mixed} x\n * @return {Mixed}\n */\n\nfunction identity(x) {\n return x;\n}\n\n//# sourceURL=webpack://watermark/./lib/functions/index.js?')},"./lib/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoader", function() { return getLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "load", function() { return load; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUrl", function() { return loadUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadFile", function() { return loadFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return createImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imageToCanvas", function() { return imageToCanvas; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapToCanvas", function() { return mapToCanvas; });\n/* harmony import */ var _functions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions */ "./lib/functions/index.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n/**\n * Set the src of an image object and call the resolve function\n * once it has loaded\n *\n * @param {Image} img\n * @param {String} src\n * @param {Function} resolve\n */\n\nfunction setAndResolve(img, src, resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = src;\n}\n/**\n * Given a resource, return an appropriate loading function for it\'s type\n *\n * @param {String|File|Image} resource\n * @return {Function}\n */\n\n\nfunction getLoader(resource) {\n var type = _typeof(resource);\n\n if (type === \'string\') {\n return loadUrl;\n }\n\n if (resource instanceof Image) {\n return _functions__WEBPACK_IMPORTED_MODULE_0__["identity"];\n }\n\n return loadFile;\n}\n/**\n * Used for loading image resources asynchronously and maintaining\n * the supplied order of arguments\n *\n * @param {Array} resources - a mixed array of urls, File objects, or Image objects\n * @param {Function} init - called at the beginning of resource initialization\n * @return {Promise}\n */\n\nfunction load(resources, init) {\n var promises = [];\n\n for (var i = 0; i < resources.length; i++) {\n var resource = resources[i];\n var loader = getLoader(resource);\n var promise = loader(resource, init);\n promises.push(promise);\n }\n\n return Promise.all(promises);\n}\n/**\n * Load an image by its url\n *\n * @param {String} url\n * @param {Function} init - an optional image initializer\n * @return {Promise}\n */\n\nfunction loadUrl(url, init) {\n var img = new Image();\n typeof init === \'function\' && init(img);\n return new Promise(function (resolve) {\n img.onload = function () {\n return resolve(img);\n };\n\n img.src = url;\n });\n}\n/**\n * Return a collection of images from an\n * array of File objects\n *\n * @param {File} file\n * @return {Promise}\n */\n\nfunction loadFile(file) {\n var reader = new FileReader();\n return new Promise(function (resolve) {\n var img = new Image();\n\n reader.onloadend = function () {\n return setAndResolve(img, reader.result, resolve);\n };\n\n reader.readAsDataURL(file);\n });\n}\n/**\n * Create a new image, optionally configuring it\'s onload behavior\n *\n * @param {String} url\n * @param {Function} onload\n * @return {Image}\n */\n\nfunction createImage(url, onload) {\n var img = new Image();\n\n if (typeof onload === \'function\') {\n img.onload = onload;\n }\n\n img.src = url;\n return img;\n}\n/**\n * Draw an image to a canvas element\n *\n * @param {Image} img\n * @param {HTMLCanvasElement} canvas\n * @return {HTMLCanvasElement}\n */\n\nfunction drawImage(img, canvas) {\n var ctx = canvas.getContext(\'2d\');\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n return canvas;\n}\n/**\n * Convert an Image object to a canvas\n *\n * @param {Image} img\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement}\n */\n\n\nfunction imageToCanvas(img, pool) {\n var canvas = pool.pop();\n return drawImage(img, canvas);\n}\n/**\n * Convert an array of image objects\n * to canvas elements\n *\n * @param {Array} images\n * @param {CanvasPool} pool\n * @return {HTMLCanvasElement[]}\n */\n\nfunction mapToCanvas(images, pool) {\n return images.map(function (img) {\n return imageToCanvas(img, pool);\n });\n}\n\n//# sourceURL=webpack://watermark/./lib/image/index.js?')},"./lib/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return watermark; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/image/index.js");\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./canvas */ "./lib/canvas/index.js");\n/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blob */ "./lib/blob/index.js");\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style */ "./lib/style/index.js");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./object */ "./lib/object/index.js");\n/* harmony import */ var _canvas_pool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./canvas/pool */ "./lib/canvas/pool.js");\n\n\n\n\n\n\n/**\n * A configuration type for the watermark function\n *\n * @typedef {Object} Options\n * @property {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @property {Number} poolSize - number of canvas elements available for drawing,\n * @property {CanvasPool} pool - the pool used. If provided, poolSize will be ignored\n */\n\n/**\n * @constant\n * @type {Options}\n */\n\nvar defaults = {\n init: function init() {}\n};\n/**\n * Merge the given options with the defaults\n *\n * @param {Options} options\n * @return {Options}\n */\n\nfunction mergeOptions(options) {\n return Object(_object__WEBPACK_IMPORTED_MODULE_4__["extend"])(Object(_object__WEBPACK_IMPORTED_MODULE_4__["clone"])(defaults), options);\n}\n/**\n * Release canvases from a draw result for reuse. Returns\n * the dataURL from the result\'s canvas\n *\n * @param {DrawResult} result\n * @param {CanvasPool} pool\n * @return {String}\n */\n\n\nfunction release(result, pool) {\n var canvas = result.canvas,\n sources = result.sources;\n var dataURL = Object(_canvas__WEBPACK_IMPORTED_MODULE_1__["dataUrl"])(canvas);\n sources.forEach(pool.release);\n return dataURL;\n}\n/**\n * Return a watermark object\n *\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Options} options - a configuration object for watermark\n * @param {Promise} promise - optional\n * @return {Object}\n */\n\n\nfunction watermark(resources) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var promise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var opts = mergeOptions(options);\n promise || (promise = Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])(resources, opts.init));\n return {\n /**\n * Convert the watermarked image into a dataUrl. The draw\n * function is given all images as canvas elements in order\n *\n * @param {Function} draw\n * @return {Object}\n */\n dataUrl: function dataUrl(draw) {\n var promise = this.then(function (images) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["mapToCanvas"])(images, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n }).then(function (canvases) {\n return _style__WEBPACK_IMPORTED_MODULE_3__["result"](draw, canvases);\n }).then(function (result) {\n return release(result, _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Load additional resources\n *\n * @param {Array} resources - a collection of urls, File objects, or Image objects\n * @param {Function} init - an initialization function that is given Image objects before loading (only applies if resources is a collection of urls)\n * @return {Object}\n */\n load: function load(resources, init) {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource].concat(resources), init);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Render the current state of the watermarked image. Useful for performing\n * actions after the watermark has been applied\n *\n * @return {Object}\n */\n render: function render() {\n var promise = this.then(function (resource) {\n return Object(_image__WEBPACK_IMPORTED_MODULE_0__["load"])([resource]);\n });\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into a blob\n *\n * @param {Function} draw\n * @return {Object}\n */\n blob: function blob(draw) {\n var promise = this.dataUrl(draw).then(_blob__WEBPACK_IMPORTED_MODULE_2__["blob"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Convert the watermark into an image using the given draw function\n *\n * @param {Function} draw\n * @return {Object}\n */\n image: function image(draw) {\n var promise = this.dataUrl(draw).then(_image__WEBPACK_IMPORTED_MODULE_0__["createImage"]);\n return watermark(resources, opts, promise);\n },\n\n /**\n * Delegate to the watermark promise\n *\n * @return {Promise}\n */\n then: function then() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return promise.then.apply(promise, funcs);\n }\n };\n}\n;\n/**\n * Style functions\n */\n\nwatermark.image = _style__WEBPACK_IMPORTED_MODULE_3__["image"];\nwatermark.text = _style__WEBPACK_IMPORTED_MODULE_3__["text"];\n/**\n * Clean up all canvas references\n */\n\nwatermark.destroy = function () {\n return _canvas_pool__WEBPACK_IMPORTED_MODULE_5__["default"].clear();\n};\n\n//# sourceURL=webpack://watermark/./lib/index.js?')},"./lib/object/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return clone; });\n/**\n * Extend one object with the properties of another\n *\n * @param {Object} first\n * @param {Object} second\n * @return {Object}\n */\nfunction extend(first, second) {\n var secondKeys = Object.keys(second);\n secondKeys.forEach(function (key) {\n return first[key] = second[key];\n });\n return first;\n}\n/**\n * Create a shallow copy of the object\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction clone(obj) {\n return extend({}, obj);\n}\n\n//# sourceURL=webpack://watermark/./lib/object/index.js?')},"./lib/style/image/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, alpha) {\n var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n alpha || (alpha = 1.0);\n return function (target, watermark) {\n var context = target.getContext(\'2d\');\n\n var width = function width(target, watermark) {\n if (scale.width) {\n return scale.width(target, watermark);\n }\n\n return watermark.width;\n };\n\n var height = function height(target, watermark) {\n if (scale.height) {\n return scale.height(target, watermark);\n }\n\n return watermark.height;\n };\n\n context.save();\n context.globalAlpha = alpha;\n context.drawImage(watermark, xFn(target, watermark), yFn(target, watermark), width(target, watermark), height(target, watermark));\n context.restore();\n return target;\n };\n}\n/**\n * Place the watermark in the lower right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper right corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperRight(alpha) {\n return atPos(function (target, mark) {\n return target.width - (mark.width + 10);\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the lower left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction lowerLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return target.height - (mark.height + 10);\n }, alpha);\n}\n/**\n * Place the watermark in the upper left corner of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction upperLeft(alpha) {\n return atPos(function (target, mark) {\n return 10;\n }, function (target, mark) {\n return 10;\n }, alpha);\n}\n/**\n * Place the watermark in the center of the target\n * image\n *\n * @param {Number} alpha\n * @return {Function}\n */\n\nfunction center(alpha) {\n return atPos(function (target, mark) {\n return (target.width - mark.width) / 2;\n }, function (target, mark) {\n return (target.height - mark.height) / 2;\n }, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/image/index.js?')},"./lib/style/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "image", function() { return image; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "result", function() { return result; });\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image */ "./lib/style/image/index.js");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./lib/style/text/index.js");\n\n\n/**\n * @typedef {Object} DrawResult\n * @property {HTMLCanvasElement} canvas - the end result of a draw\n * @property {HTMLCanvasElement[]} sources - the sources used in the draw\n */\n\nvar image = _image__WEBPACK_IMPORTED_MODULE_0__;\nvar text = _text__WEBPACK_IMPORTED_MODULE_1__;\n/**\n * Create a DrawResult by apply a list of canvas elements to a draw function\n *\n * @param {Function} draw - the draw function used to create a DrawResult\n * @param {HTMLCanvasElement} sources - the canvases used by the draw function\n * @return {DrawResult}\n */\n\nfunction result(draw, sources) {\n var canvas = draw.apply(null, sources);\n return {\n canvas: canvas,\n sources: sources\n };\n}\n\n//# sourceURL=webpack://watermark/./lib/style/index.js?')},"./lib/style/text/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atPos", function() { return atPos; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerRight", function() { return lowerRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lowerLeft", function() { return lowerLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperRight", function() { return upperRight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperLeft", function() { return upperLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "center", function() { return center; });\n/**\n * Return a function for positioning a watermark on a target canvas\n *\n * @param {Function} xFn - a function to determine an x value\n * @param {Function} yFn - a function to determine a y value\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha\n * @return {Function}\n */\nfunction atPos(xFn, yFn, text, font, fillStyle, alpha) {\n alpha || (alpha = 1.0);\n return function (target) {\n var context = target.getContext(\'2d\');\n context.save();\n context.globalAlpha = alpha;\n context.fillStyle = fillStyle;\n context.font = font;\n var metrics = context.measureText(text);\n context.fillText(text, xFn(target, metrics, context), yFn(target, metrics, context));\n context.restore();\n return target;\n };\n}\n/**\n * Write text to the lower right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the lower left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction lowerLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function (target) {\n return y || target.height - 10;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper right corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperRight(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics) {\n return target.width - (metrics.width + 10);\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the upper left corner of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction upperLeft(text, font, fillStyle, alpha, y) {\n return atPos(function () {\n return 10;\n }, function () {\n return y || 20;\n }, text, font, fillStyle, alpha);\n}\n/**\n * Write text to the center of the target canvas\n *\n * @param {String} text - the text to write\n * @param {String} font - same as the CSS font property\n * @param {String} fillStyle\n * @param {Number} alpha - control text transparency\n * @param {Number} y - height in text metrics is not very well supported. This is a manual value\n * @return {Function}\n */\n\nfunction center(text, font, fillStyle, alpha, y) {\n return atPos(function (target, metrics, ctx) {\n ctx.textAlign = \'center\';\n return target.width / 2;\n }, function (target, metrics, ctx) {\n ctx.textBaseline = \'middle\';\n return target.height / 2;\n }, text, font, fillStyle, alpha);\n}\n\n//# sourceURL=webpack://watermark/./lib/style/text/index.js?')},"./node_modules/@babel/register/lib/browser.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.default = register;\nexports.revert = revert;\n\nfunction register() {}\n\nfunction revert() {}\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/browser.js?')},"./node_modules/@babel/register/lib/index.js":function(module,exports,__webpack_require__){eval('exports = module.exports = function (...args) {\n return register(...args);\n};\n\nexports.__esModule = true;\n\nconst node = __webpack_require__(/*! ./node */ "./node_modules/@babel/register/lib/browser.js");\n\nconst register = node.default;\nObject.assign(exports, node);\n\n//# sourceURL=webpack://watermark/./node_modules/@babel/register/lib/index.js?')}},e={},f.m=d,f.c=e,f.d=function(n,e,t){f.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},f.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return f.d(e,"a",e),e},f.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},f.p="",f(f.s="./index.js");function f(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return d[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var d,e}); \ No newline at end of file