├── .github ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── Thumbnail ├── function.json └── index.js ├── extensions.csproj ├── host.json ├── package-lock.json └── package.json /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 4 | > Please provide us with the following information: 5 | > --------------------------------------------------------------- 6 | 7 | ### This issue is for a: (mark with an `x`) 8 | ``` 9 | - [ ] bug report -> please search issues before submitting 10 | - [ ] feature request 11 | - [ ] documentation issue or request 12 | - [ ] regression (a behavior that used to work and stopped in a new release) 13 | ``` 14 | 15 | ### Minimal steps to reproduce 16 | > 17 | 18 | ### Any log messages given by the failure 19 | > 20 | 21 | ### Expected/desired behavior 22 | > 23 | 24 | ### OS and Version? 25 | > Windows 7, 8 or 10. Linux (which distribution). macOS (Yosemite? El Capitan? Sierra?) 26 | 27 | ### Versions 28 | > 29 | 30 | ### Mention any other details that might be useful 31 | 32 | > --------------------------------------------------------------- 33 | > Thanks! We'll be in touch soon. 34 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Purpose 2 | 3 | * ... 4 | 5 | ## Does this introduce a breaking change? 6 | 7 | ``` 8 | [ ] Yes 9 | [ ] No 10 | ``` 11 | 12 | ## Pull Request Type 13 | What kind of change does this Pull Request introduce? 14 | 15 | 16 | ``` 17 | [ ] Bugfix 18 | [ ] Feature 19 | [ ] Code style update (formatting, local variables) 20 | [ ] Refactoring (no functional changes, no api changes) 21 | [ ] Documentation content changes 22 | [ ] Other... Please describe: 23 | ``` 24 | 25 | ## How to Test 26 | * Get the code 27 | 28 | ``` 29 | git clone [repo-address] 30 | cd [repo-name] 31 | git checkout [branch-name] 32 | npm install 33 | ``` 34 | 35 | * Test the code 36 | 37 | ``` 38 | ``` 39 | 40 | ## What to Check 41 | Verify that the following are valid 42 | * ... 43 | 44 | ## Other Information 45 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [project-title] Changelog 2 | 3 | 4 | # x.y.z (yyyy-mm-dd) 5 | 6 | *Features* 7 | * ... 8 | 9 | *Bug Fixes* 10 | * ... 11 | 12 | *Breaking Changes* 13 | * ... 14 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to this project 2 | 3 | This project welcomes contributions and suggestions. Most contributions require you to agree to a 4 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us 5 | the rights to use your contribution. For details, visit https://cla.microsoft.com. 6 | 7 | When you submit a pull request, a CLA-bot will automatically determine whether you need to provide 8 | a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions 9 | provided by the bot. You will only need to do this once across all repos using our CLA. 10 | 11 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 12 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 13 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 14 | 15 | - [Code of Conduct](#coc) 16 | - [Issues and Bugs](#issue) 17 | - [Feature Requests](#feature) 18 | - [Submission Guidelines](#submit) 19 | 20 | ## Code of Conduct 21 | Help us keep this project open and inclusive. Please read and follow our [Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 22 | 23 | ## Found an Issue? 24 | If you find a bug in the source code or a mistake in the documentation, you can help us by 25 | [submitting an issue](#submit-issue) to the GitHub Repository. Even better, you can 26 | [submit a Pull Request](#submit-pr) with a fix. 27 | 28 | ## Want a Feature? 29 | You can *request* a new feature by [submitting an issue](#submit-issue) to the GitHub 30 | Repository. If you would like to *implement* a new feature, please submit an issue with 31 | a proposal for your work first, to be sure that we can use it. 32 | 33 | * **Small Features** can be crafted and directly [submitted as a Pull Request](#submit-pr). 34 | 35 | ## Submission Guidelines 36 | 37 | ### Submitting an Issue 38 | Before you submit an issue, search the archive, maybe your question was already answered. 39 | 40 | If your issue appears to be a bug, and hasn't been reported, open a new issue. 41 | Help us to maximize the effort we can spend fixing issues and adding new 42 | features, by not reporting duplicate issues. Providing the following information will increase the 43 | chances of your issue being dealt with quickly: 44 | 45 | * **Overview of the Issue** - if an error is being thrown a non-minified stack trace helps 46 | * **Version** - what version is affected (e.g. 0.1.2) 47 | * **Motivation for or Use Case** - explain what are you trying to do and why the current behavior is a bug for you 48 | * **Browsers and Operating System** - is this a problem with all browsers? 49 | * **Reproduce the Error** - provide a live example or a unambiguous set of steps 50 | * **Related Issues** - has a similar issue been reported before? 51 | * **Suggest a Fix** - if you can't fix the bug yourself, perhaps you can point to what might be 52 | causing the problem (line of code or commit) 53 | 54 | You can file new issues by providing the above information at the corresponding repository's issues link: https://github.com/[organization-name]/[repository-name]/issues/new]. 55 | 56 | ### Submitting a Pull Request (PR) 57 | Before you submit your Pull Request (PR) consider the following guidelines: 58 | 59 | * Search the repository (https://github.com/[organization-name]/[repository-name]/pulls) for an open or closed PR 60 | that relates to your submission. You don't want to duplicate effort. 61 | 62 | * Make your changes in a new git fork: 63 | 64 | * Commit your changes using a descriptive commit message 65 | * Push your fork to GitHub: 66 | * In GitHub, create a pull request 67 | * If we suggest changes then: 68 | * Make the required updates. 69 | * Rebase your fork and force push to your GitHub repository (this will update your Pull Request): 70 | 71 | ```shell 72 | git rebase master -i 73 | git push -f 74 | ``` 75 | 76 | That's it! Thank you for your contribution! 77 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. All rights reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | page_type: sample 3 | languages: 4 | - javascript 5 | - nodejs 6 | products: 7 | - azure-storage 8 | - azure 9 | description: "This sample implements a function triggered by Azure Blob Storage to resize an image in Node.js." 10 | --- 11 | 12 | # Azure Storage Blob Trigger Image Resize Function in Node.js using the v10 SDK 13 | 14 | > IMPORTANT! This sample uses the version 10 of the Storage Blob SDK. Please refer to the sample [storage-blob-resize-function](https://github.com/Azure-Samples/storage-blob-resize-function-node) that uses the latest version of the Storage Blob SDK instead. 15 | 16 | This sample implements a function triggered by Azure Blob Storage to resize an image in Node.js. Once the image is resized, the thumbnail image is uploaded back to blob storage. 17 | 18 | The key aspects of this sample are in the function bindings and implementation. 19 | 20 | This sample is used by the topic [Tutorial: Automate resizing uploaded images using Event Grid](https://docs.microsoft.com/en-us/azure/event-grid/resize-images-on-storage-blob-upload-event?tabs=nodejsv10#deploy-the-function-code/) 21 | 22 | ## Function bindings 23 | 24 | In order to interface with image data, you need to configure the function to process binary data. 25 | 26 | The following code sets the `datatype` parameter to `binary` in the `function.json` file. 27 | 28 | ```javascript 29 | { 30 | "disabled": false, 31 | "bindings": [ 32 | { 33 | "type": "eventGridTrigger", 34 | "name": "eventGridEvent", 35 | "direction": "in" 36 | }, 37 | { 38 | "type": "blob", 39 | "name": "inputBlob", 40 | "path": "{data.url}", 41 | "connection": "AZURE_STORAGE_CONNECTION_STRING", 42 | "direction": "in", 43 | "datatype": "binary" 44 | } 45 | ] 46 | } 47 | ``` 48 | 49 | ## Function implementation 50 | 51 | The sample uses [Jimp](https://github.com/oliver-moran/jimp) to resize an incoming buffer to a thumbnail. The buffer is then converted to a stream and uploaded to Azure Storage. 52 | 53 | ```javascript 54 | const stream = require('stream'); 55 | const Jimp = require('jimp'); 56 | 57 | const { 58 | Aborter, 59 | BlobURL, 60 | BlockBlobURL, 61 | ContainerURL, 62 | ServiceURL, 63 | SharedKeyCredential, 64 | StorageURL, 65 | uploadStreamToBlockBlob 66 | } = require("@azure/storage-blob"); 67 | 68 | const ONE_MEGABYTE = 1024 * 1024; 69 | const ONE_MINUTE = 60 * 1000; 70 | const uploadOptions = { bufferSize: 4 * ONE_MEGABYTE, maxBuffers: 20 }; 71 | 72 | const containerName = process.env.BLOB_CONTAINER_NAME; 73 | const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME; 74 | const accessKey = process.env.AZURE_STORAGE_ACCOUNT_ACCESS_KEY; 75 | 76 | const sharedKeyCredential = new SharedKeyCredential( 77 | accountName, 78 | accessKey); 79 | const pipeline = StorageURL.newPipeline(sharedKeyCredential); 80 | const serviceURL = new ServiceURL( 81 | `https://${accountName}.blob.core.windows.net`, 82 | pipeline 83 | ); 84 | 85 | module.exports = (context, eventGridEvent, inputBlob) => { 86 | 87 | const aborter = Aborter.timeout(30 * ONE_MINUTE); 88 | const widthInPixels = 100; 89 | const contentType = context.bindingData.data.contentType; 90 | const blobUrl = context.bindingData.data.url; 91 | const blobName = blobUrl.slice(blobUrl.lastIndexOf("/")+1); 92 | 93 | const image = await Jimp.read(inputBlob); 94 | const thumbnail = image.resize(widthInPixels, Jimp.AUTO); 95 | const thumbnailBuffer = await thumbnail.getBufferAsync(Jimp.AUTO); 96 | const readStream = stream.PassThrough(); 97 | readStream.end(thumbnailBuffer); 98 | 99 | const containerURL = ContainerURL.fromServiceURL(serviceURL, containerName); 100 | const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, blobName); 101 | try { 102 | 103 | await uploadStreamToBlockBlob(aborter, readStream, 104 | blockBlobURL, uploadOptions.bufferSize, uploadOptions.maxBuffers, 105 | { blobHTTPHeaders: { blobContentType: "image/*" } }); 106 | 107 | } catch (err) { 108 | 109 | context.log(err.message); 110 | 111 | } finally { 112 | 113 | context.done(); 114 | 115 | } 116 | }; 117 | ``` 118 | 119 | You can use the [Azure Storage Explorer](https://azure.microsoft.com/features/storage-explorer/) to view blob containers and verify the resize is successful. 120 | -------------------------------------------------------------------------------- /Thumbnail/function.json: -------------------------------------------------------------------------------- 1 | { 2 | "disabled": false, 3 | "bindings": [ 4 | { 5 | "type": "eventGridTrigger", 6 | "name": "eventGridEvent", 7 | "direction": "in" 8 | }, 9 | { 10 | "type": "blob", 11 | "name": "inputBlob", 12 | "path": "{data.url}", 13 | "connection": "AZURE_STORAGE_CONNECTION_STRING", 14 | "direction": "in", 15 | "datatype": "binary" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /Thumbnail/index.js: -------------------------------------------------------------------------------- 1 | const stream = require('stream'); 2 | const Jimp = require('jimp'); 3 | 4 | const { 5 | Aborter, 6 | BlobURL, 7 | BlockBlobURL, 8 | ContainerURL, 9 | ServiceURL, 10 | SharedKeyCredential, 11 | StorageURL, 12 | uploadStreamToBlockBlob 13 | } = require("@azure/storage-blob"); 14 | 15 | const ONE_MEGABYTE = 1024 * 1024; 16 | const ONE_MINUTE = 60 * 1000; 17 | const uploadOptions = { bufferSize: 4 * ONE_MEGABYTE, maxBuffers: 20 }; 18 | 19 | const containerName = process.env.BLOB_CONTAINER_NAME; 20 | const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME; 21 | const accessKey = process.env.AZURE_STORAGE_ACCOUNT_ACCESS_KEY; 22 | 23 | const sharedKeyCredential = new SharedKeyCredential( 24 | accountName, 25 | accessKey); 26 | const pipeline = StorageURL.newPipeline(sharedKeyCredential); 27 | const serviceURL = new ServiceURL( 28 | `https://${accountName}.blob.core.windows.net`, 29 | pipeline 30 | ); 31 | 32 | module.exports = (context, eventGridEvent, inputBlob) => { 33 | 34 | const aborter = Aborter.timeout(30 * ONE_MINUTE); 35 | const widthInPixels = 100; 36 | const contentType = context.bindingData.data.contentType; 37 | const blobUrl = context.bindingData.data.url; 38 | const blobName = blobUrl.slice(blobUrl.lastIndexOf("/")+1); 39 | 40 | const image = await Jimp.read(inputBlob); 41 | const thumbnail = image.resize(widthInPixels, Jimp.AUTO); 42 | const thumbnailBuffer = await thumbnail.getBufferAsync(Jimp.AUTO); 43 | const readStream = stream.PassThrough(); 44 | readStream.end(thumbnailBuffer); 45 | 46 | const containerURL = ContainerURL.fromServiceURL(serviceURL, containerName); 47 | const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, blobName); 48 | try { 49 | 50 | await uploadStreamToBlockBlob(aborter, readStream, 51 | blockBlobURL, uploadOptions.bufferSize, uploadOptions.maxBuffers, 52 | { blobHTTPHeaders: { blobContentType: "image/*" } }); 53 | 54 | } catch (err) { 55 | 56 | context.log(err.message); 57 | 58 | } finally { 59 | 60 | context.done(); 61 | 62 | } 63 | }; 64 | -------------------------------------------------------------------------------- /extensions.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | netstandard2.0 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /host.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0" 3 | } 4 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "function-image-upload-resize-node", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@azure/ms-rest-js": { 8 | "version": "2.0.4", 9 | "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-2.0.4.tgz", 10 | "integrity": "sha512-nSOPt6st0RtxclYBQV65qXZpvMDqiDQssktvB/SMTAJ5bIytSPtBmlttTTigO5qHvwQcfzzpQE0sMceK+dJ/IQ==", 11 | "requires": { 12 | "@types/node-fetch": "^2.3.7", 13 | "@types/tunnel": "0.0.1", 14 | "abort-controller": "^3.0.0", 15 | "form-data": "^2.5.0", 16 | "node-fetch": "^2.6.0", 17 | "tough-cookie": "^3.0.1", 18 | "tslib": "^1.10.0", 19 | "tunnel": "0.0.6", 20 | "uuid": "^3.3.2", 21 | "xml2js": "^0.4.19" 22 | } 23 | }, 24 | "@azure/storage-blob": { 25 | "version": "10.5.0", 26 | "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-10.5.0.tgz", 27 | "integrity": "sha512-67+0EP7STy9BQgzvN1RgmSvXhxRd044eDgepX7zBp7XslBxz8YGo2cSLm9w5o5Qf1FLCRlwuziRMikaPCLMpVw==", 28 | "requires": { 29 | "@azure/ms-rest-js": "^2.0.0", 30 | "events": "^3.0.0", 31 | "tslib": "^1.9.3" 32 | } 33 | }, 34 | "@babel/runtime": { 35 | "version": "7.10.3", 36 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.3.tgz", 37 | "integrity": "sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw==", 38 | "requires": { 39 | "regenerator-runtime": "^0.13.4" 40 | } 41 | }, 42 | "@jimp/bmp": { 43 | "version": "0.13.0", 44 | "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.13.0.tgz", 45 | "integrity": "sha512-7i/XZLoK5JETBKO0VL7qjnr6WDVl1X8mmaUk6Lzq06/veMPC5IwUIZi1JRVAXPEwTf5uUegq0WFnmUS0lVYzFw==", 46 | "requires": { 47 | "@babel/runtime": "^7.7.2", 48 | "@jimp/utils": "^0.13.0", 49 | "bmp-js": "^0.1.0" 50 | } 51 | }, 52 | "@jimp/core": { 53 | "version": "0.13.0", 54 | "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.13.0.tgz", 55 | "integrity": "sha512-BMFEUm5HbRP4yCo4Q23CJFx/v6Yr3trw7rERmS1GKUEooDq9ktApZWWTvWq/vggKyysKX0nQ+KT+FaFD/75Q+Q==", 56 | "requires": { 57 | "@babel/runtime": "^7.7.2", 58 | "@jimp/utils": "^0.13.0", 59 | "any-base": "^1.1.0", 60 | "buffer": "^5.2.0", 61 | "exif-parser": "^0.1.12", 62 | "file-type": "^9.0.0", 63 | "load-bmfont": "^1.3.1", 64 | "mkdirp": "^0.5.1", 65 | "phin": "^2.9.1", 66 | "pixelmatch": "^4.0.2", 67 | "tinycolor2": "^1.4.1" 68 | } 69 | }, 70 | "@jimp/custom": { 71 | "version": "0.13.0", 72 | "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.13.0.tgz", 73 | "integrity": "sha512-Zir/CHoLRhQDGfPWueCIQbVjVUlayNIUch9fulq4M9V2S+ynHx9BqRn58z8wy+mk8jm1WlpRVhvZ8QUenbL0vg==", 74 | "requires": { 75 | "@babel/runtime": "^7.7.2", 76 | "@jimp/core": "^0.13.0" 77 | } 78 | }, 79 | "@jimp/gif": { 80 | "version": "0.13.0", 81 | "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.13.0.tgz", 82 | "integrity": "sha512-7FO2Fa9FZluqGt1MM/L8s6P5UEedxrIQT2eBAxzB8Z82YTTSWQXw4bdrZWCwiQjBFZwKTIaULIfw6+TxA/Q2XA==", 83 | "requires": { 84 | "@babel/runtime": "^7.7.2", 85 | "@jimp/utils": "^0.13.0", 86 | "gifwrap": "^0.9.2", 87 | "omggif": "^1.0.9" 88 | } 89 | }, 90 | "@jimp/jpeg": { 91 | "version": "0.13.0", 92 | "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.13.0.tgz", 93 | "integrity": "sha512-Fol/DxA1lnIzCsNx/CckIEoyWImQHiWPgFAWL5s7VIVaJrEFnnbRqfOxmvr8yWg8mh3hWLeXNcxqA82CKXgg+Q==", 94 | "requires": { 95 | "@babel/runtime": "^7.7.2", 96 | "@jimp/utils": "^0.13.0", 97 | "jpeg-js": "^0.4.0" 98 | } 99 | }, 100 | "@jimp/plugin-blit": { 101 | "version": "0.13.0", 102 | "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.13.0.tgz", 103 | "integrity": "sha512-roCShFZosJgRMLCLzuOT1pRZysQF/p3avQieZiu9pfg2F9X09f91OauU2Lf3/yOp0TZCWbheqbem9MPlhyED8w==", 104 | "requires": { 105 | "@babel/runtime": "^7.7.2", 106 | "@jimp/utils": "^0.13.0" 107 | } 108 | }, 109 | "@jimp/plugin-blur": { 110 | "version": "0.13.0", 111 | "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.13.0.tgz", 112 | "integrity": "sha512-LeBhQe72bRk2fe2AftcqcDaWgSu6vFD0fxiAYYMy3pHa8pnPAwnw2W3u4bV/gc5XJt6AJzoRyc7WVG2pE4A3gg==", 113 | "requires": { 114 | "@babel/runtime": "^7.7.2", 115 | "@jimp/utils": "^0.13.0" 116 | } 117 | }, 118 | "@jimp/plugin-circle": { 119 | "version": "0.13.0", 120 | "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.13.0.tgz", 121 | "integrity": "sha512-INwIl8zgWnJYXxYkNhIjG8TXg2Q1nh008SDKyC+Pug4ce/XRJC8w/Gk6HS+U9Z2tIO2/zXv473k/JaiwvDMu1w==", 122 | "requires": { 123 | "@babel/runtime": "^7.7.2", 124 | "@jimp/utils": "^0.13.0" 125 | } 126 | }, 127 | "@jimp/plugin-color": { 128 | "version": "0.13.0", 129 | "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.13.0.tgz", 130 | "integrity": "sha512-e71UDivZdZGOhQRLjDo4a0BKgrH858HJ7zFk7/Yti58LwgeIGjYHhuYc+xQOdnBWPzGSD47TuFX5GXmf/x1nmg==", 131 | "requires": { 132 | "@babel/runtime": "^7.7.2", 133 | "@jimp/utils": "^0.13.0", 134 | "tinycolor2": "^1.4.1" 135 | } 136 | }, 137 | "@jimp/plugin-contain": { 138 | "version": "0.13.0", 139 | "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.13.0.tgz", 140 | "integrity": "sha512-qPYS+ccMP4mEnf7BB0bcaszUTth8OxeRX0MdMvU6PDEI0nIvVVNwmuI6YtNqqs12PwuYxgPkq6AFenyLyoNP1g==", 141 | "requires": { 142 | "@babel/runtime": "^7.7.2", 143 | "@jimp/utils": "^0.13.0" 144 | } 145 | }, 146 | "@jimp/plugin-cover": { 147 | "version": "0.13.0", 148 | "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.13.0.tgz", 149 | "integrity": "sha512-S2GkbXNgIb0afof/NLLq9IJDZPOcFtu1mc32ngt9S8HzXsNHgRAzONW7cg56bwQ6p0+sz/dS5tB4ctOW/pu/Dw==", 150 | "requires": { 151 | "@babel/runtime": "^7.7.2", 152 | "@jimp/utils": "^0.13.0" 153 | } 154 | }, 155 | "@jimp/plugin-crop": { 156 | "version": "0.13.0", 157 | "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.13.0.tgz", 158 | "integrity": "sha512-Y1Ug3kOzsq72EjLiWQlwkHuvUvdSmFUDtxpyOXh3RxeWF7wmdjH8FvdhPj8hWvFLsDYFgWGaLI4Z6SXOr+N8nA==", 159 | "requires": { 160 | "@babel/runtime": "^7.7.2", 161 | "@jimp/utils": "^0.13.0" 162 | } 163 | }, 164 | "@jimp/plugin-displace": { 165 | "version": "0.13.0", 166 | "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.13.0.tgz", 167 | "integrity": "sha512-c80VIUjIqQoavafthLpYRZdzANCxbOCHzqkFVbZ0kNKJnDDk6fW55mvVW4TJLDToDU81WMlttCmNV0oXcX93gQ==", 168 | "requires": { 169 | "@babel/runtime": "^7.7.2", 170 | "@jimp/utils": "^0.13.0" 171 | } 172 | }, 173 | "@jimp/plugin-dither": { 174 | "version": "0.13.0", 175 | "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.13.0.tgz", 176 | "integrity": "sha512-EUz/y/AaQ00TnaiVLVAXLz8n8Nx7S36lKi4VXPeYy5a5FyzBimxNiKxdITVe9zooN7+H4FP++/xGFGFMpfWtRg==", 177 | "requires": { 178 | "@babel/runtime": "^7.7.2", 179 | "@jimp/utils": "^0.13.0" 180 | } 181 | }, 182 | "@jimp/plugin-fisheye": { 183 | "version": "0.13.0", 184 | "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.13.0.tgz", 185 | "integrity": "sha512-O7h5pNTk2sYcTKxLvV6+zzUpLx8qzdNl6qiP9x1S0CKy64oZ9IwtK1eR1eLom0YA8tUR7rX5Ra4pB8bhq8Oyqw==", 186 | "requires": { 187 | "@babel/runtime": "^7.7.2", 188 | "@jimp/utils": "^0.13.0" 189 | } 190 | }, 191 | "@jimp/plugin-flip": { 192 | "version": "0.13.0", 193 | "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.13.0.tgz", 194 | "integrity": "sha512-gWk+Q0LmCvupUuWRfoGyETmH/+lJKZuPCeA9K6UHJldq5Cdg/3MrlKUNS1HcPCDXjw+dWDGC8QnNslvMTaY5VQ==", 195 | "requires": { 196 | "@babel/runtime": "^7.7.2", 197 | "@jimp/utils": "^0.13.0" 198 | } 199 | }, 200 | "@jimp/plugin-gaussian": { 201 | "version": "0.13.0", 202 | "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.13.0.tgz", 203 | "integrity": "sha512-0ctRqbCcLdy8y9IrSIH2McWNPLnEwjoe8qxtqoi51zRsM3z3mwjiTC2q8AWeF0SdIdWwV+YV/eP0494AJqjTsg==", 204 | "requires": { 205 | "@babel/runtime": "^7.7.2", 206 | "@jimp/utils": "^0.13.0" 207 | } 208 | }, 209 | "@jimp/plugin-invert": { 210 | "version": "0.13.0", 211 | "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.13.0.tgz", 212 | "integrity": "sha512-k7TWx/la0MrTcT1dMtncV6I9IuGToRm9Q0ekzfb3k8bHzWRYX4SUtt/WrZ/I+/znD/fGorLtFI057v7mcLJc5A==", 213 | "requires": { 214 | "@babel/runtime": "^7.7.2", 215 | "@jimp/utils": "^0.13.0" 216 | } 217 | }, 218 | "@jimp/plugin-mask": { 219 | "version": "0.13.0", 220 | "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.13.0.tgz", 221 | "integrity": "sha512-U3OdsgtMNpbCYc1lzzu96zdSgyz7BK9eD8IoFHdw4Ma8gCuM8kp9gdBJlKnzOh8eyYvssdCMZOWz9Xbxc5xH9A==", 222 | "requires": { 223 | "@babel/runtime": "^7.7.2", 224 | "@jimp/utils": "^0.13.0" 225 | } 226 | }, 227 | "@jimp/plugin-normalize": { 228 | "version": "0.13.0", 229 | "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.13.0.tgz", 230 | "integrity": "sha512-yKOgZSvOxSHNlh+U9NOQH4Drgca0Dwb7DQRk3vj67gvHQC96JafIpGwN+9V4fP89lA3rkItbw6xgN6C/28HEUQ==", 231 | "requires": { 232 | "@babel/runtime": "^7.7.2", 233 | "@jimp/utils": "^0.13.0" 234 | } 235 | }, 236 | "@jimp/plugin-print": { 237 | "version": "0.13.0", 238 | "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.13.0.tgz", 239 | "integrity": "sha512-Tv7r/1t7z63oLeRuEWw9xbm0G5uuBE54986+BOu8OFaHBpV/BbVHrE7ouApA0mKVZqMZCVjhO6Ph8+uFzRjdOw==", 240 | "requires": { 241 | "@babel/runtime": "^7.7.2", 242 | "@jimp/utils": "^0.13.0", 243 | "load-bmfont": "^1.4.0" 244 | } 245 | }, 246 | "@jimp/plugin-resize": { 247 | "version": "0.13.0", 248 | "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.13.0.tgz", 249 | "integrity": "sha512-XOo0Skn7aq/aGxV9czFx6EaBUbAsAGCVbAS26fMM0AZ4YAWWUEleKTpHunEo92giIPhvlxeFFjQR2jQ9UcB3uQ==", 250 | "requires": { 251 | "@babel/runtime": "^7.7.2", 252 | "@jimp/utils": "^0.13.0" 253 | } 254 | }, 255 | "@jimp/plugin-rotate": { 256 | "version": "0.13.0", 257 | "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.13.0.tgz", 258 | "integrity": "sha512-BaNeh655kF9Rz01ZV+Bkc8hLsHpNu3QnzigruVDjGt9Paoig0EBr+Dgyjje+7eTLu20kyuyxwPUAxLSOiPiraQ==", 259 | "requires": { 260 | "@babel/runtime": "^7.7.2", 261 | "@jimp/utils": "^0.13.0" 262 | } 263 | }, 264 | "@jimp/plugin-scale": { 265 | "version": "0.13.0", 266 | "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.13.0.tgz", 267 | "integrity": "sha512-e/f7lvii+DmRMgYF+uBKQy437f+J66WbL0FcFEataCF/W9UkTIQGeXdECwJSPfqr81SxC5mGbSBbsdbMKChzAQ==", 268 | "requires": { 269 | "@babel/runtime": "^7.7.2", 270 | "@jimp/utils": "^0.13.0" 271 | } 272 | }, 273 | "@jimp/plugin-shadow": { 274 | "version": "0.13.0", 275 | "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.13.0.tgz", 276 | "integrity": "sha512-qObtH63dmfPLze5wE8XDRjDsBOUnAfEWib4YbjPXGBZVxeKD7+2oPGemsK56HqC/+rYzIynkbi4MUIV1Q0dGjA==", 277 | "requires": { 278 | "@babel/runtime": "^7.7.2", 279 | "@jimp/utils": "^0.13.0" 280 | } 281 | }, 282 | "@jimp/plugin-threshold": { 283 | "version": "0.13.0", 284 | "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.13.0.tgz", 285 | "integrity": "sha512-ACF7jk0ogso+2RK+0EsvBupVfE3IMq39wGFQWgpnHR9Tj12mSO279f6i/H8bcj1ZXmHot22nwLOG0wO4AlAaRg==", 286 | "requires": { 287 | "@babel/runtime": "^7.7.2", 288 | "@jimp/utils": "^0.13.0" 289 | } 290 | }, 291 | "@jimp/plugins": { 292 | "version": "0.13.0", 293 | "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.13.0.tgz", 294 | "integrity": "sha512-onu8GnSnFjLFuFVFq8+aTYFIDfH8kwZuBHeGaDyScPFFn6QMKsPl4TeLzQ5vwIPvcpkADuFFfuAshE4peutjjA==", 295 | "requires": { 296 | "@babel/runtime": "^7.7.2", 297 | "@jimp/plugin-blit": "^0.13.0", 298 | "@jimp/plugin-blur": "^0.13.0", 299 | "@jimp/plugin-circle": "^0.13.0", 300 | "@jimp/plugin-color": "^0.13.0", 301 | "@jimp/plugin-contain": "^0.13.0", 302 | "@jimp/plugin-cover": "^0.13.0", 303 | "@jimp/plugin-crop": "^0.13.0", 304 | "@jimp/plugin-displace": "^0.13.0", 305 | "@jimp/plugin-dither": "^0.13.0", 306 | "@jimp/plugin-fisheye": "^0.13.0", 307 | "@jimp/plugin-flip": "^0.13.0", 308 | "@jimp/plugin-gaussian": "^0.13.0", 309 | "@jimp/plugin-invert": "^0.13.0", 310 | "@jimp/plugin-mask": "^0.13.0", 311 | "@jimp/plugin-normalize": "^0.13.0", 312 | "@jimp/plugin-print": "^0.13.0", 313 | "@jimp/plugin-resize": "^0.13.0", 314 | "@jimp/plugin-rotate": "^0.13.0", 315 | "@jimp/plugin-scale": "^0.13.0", 316 | "@jimp/plugin-shadow": "^0.13.0", 317 | "@jimp/plugin-threshold": "^0.13.0", 318 | "timm": "^1.6.1" 319 | } 320 | }, 321 | "@jimp/png": { 322 | "version": "0.13.0", 323 | "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.13.0.tgz", 324 | "integrity": "sha512-9MVU0BLMQKJ6Kaiwjrq6dLDnDktZzeHtxz4qthRHaGOyHLx3RpxmbhaDuK9dDg6NASX3JuXznEhaOP4lqQODpQ==", 325 | "requires": { 326 | "@babel/runtime": "^7.7.2", 327 | "@jimp/utils": "^0.13.0", 328 | "pngjs": "^3.3.3" 329 | } 330 | }, 331 | "@jimp/tiff": { 332 | "version": "0.13.0", 333 | "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.13.0.tgz", 334 | "integrity": "sha512-8lLGgEmhVRRjzZfn/QgpM3+mijq5ORYqRHtLcqDgcQaUY/q/OU1CxLYX777pozyQ3KIq1O+jyyHZm2xu3RZkPA==", 335 | "requires": { 336 | "@babel/runtime": "^7.7.2", 337 | "utif": "^2.0.1" 338 | } 339 | }, 340 | "@jimp/types": { 341 | "version": "0.13.0", 342 | "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.13.0.tgz", 343 | "integrity": "sha512-qGq9qVHiRTgtIy061FSBr9l7OFrSiFLkKyQVnOBndEjwls2XLBKXkMmSD2U3oiHcNuf3ACsDSTIzK3KX/hDHvg==", 344 | "requires": { 345 | "@babel/runtime": "^7.7.2", 346 | "@jimp/bmp": "^0.13.0", 347 | "@jimp/gif": "^0.13.0", 348 | "@jimp/jpeg": "^0.13.0", 349 | "@jimp/png": "^0.13.0", 350 | "@jimp/tiff": "^0.13.0", 351 | "timm": "^1.6.1" 352 | } 353 | }, 354 | "@jimp/utils": { 355 | "version": "0.13.0", 356 | "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.13.0.tgz", 357 | "integrity": "sha512-zA4573jE4FIpBKiYpPGo66JOAGdv/FS/N9fW9GpkbwJeTu12fV+r4R1ARSyt8UEKdE4DMBatBmQC0U2FGZijOA==", 358 | "requires": { 359 | "@babel/runtime": "^7.7.2", 360 | "regenerator-runtime": "^0.13.3" 361 | } 362 | }, 363 | "@types/node": { 364 | "version": "12.7.4", 365 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.4.tgz", 366 | "integrity": "sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ==" 367 | }, 368 | "@types/node-fetch": { 369 | "version": "2.5.0", 370 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.0.tgz", 371 | "integrity": "sha512-TLFRywthBgL68auWj+ziWu+vnmmcHCDFC/sqCOQf1xTz4hRq8cu79z8CtHU9lncExGBsB8fXA4TiLDLt6xvMzw==", 372 | "requires": { 373 | "@types/node": "*" 374 | } 375 | }, 376 | "@types/tunnel": { 377 | "version": "0.0.1", 378 | "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.1.tgz", 379 | "integrity": "sha512-AOqu6bQu5MSWwYvehMXLukFHnupHrpZ8nvgae5Ggie9UwzDR1CCwoXgSSWNZJuyOlCdfdsWMA5F2LlmvyoTv8A==", 380 | "requires": { 381 | "@types/node": "*" 382 | } 383 | }, 384 | "abort-controller": { 385 | "version": "3.0.0", 386 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 387 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 388 | "requires": { 389 | "event-target-shim": "^5.0.0" 390 | } 391 | }, 392 | "any-base": { 393 | "version": "1.1.0", 394 | "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", 395 | "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" 396 | }, 397 | "asynckit": { 398 | "version": "0.4.0", 399 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 400 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 401 | }, 402 | "base64-js": { 403 | "version": "1.3.1", 404 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 405 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" 406 | }, 407 | "bmp-js": { 408 | "version": "0.1.0", 409 | "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", 410 | "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" 411 | }, 412 | "buffer": { 413 | "version": "5.6.0", 414 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", 415 | "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", 416 | "requires": { 417 | "base64-js": "^1.0.2", 418 | "ieee754": "^1.1.4" 419 | } 420 | }, 421 | "buffer-equal": { 422 | "version": "0.0.1", 423 | "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", 424 | "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" 425 | }, 426 | "combined-stream": { 427 | "version": "1.0.8", 428 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 429 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 430 | "requires": { 431 | "delayed-stream": "~1.0.0" 432 | } 433 | }, 434 | "define-properties": { 435 | "version": "1.1.3", 436 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 437 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 438 | "requires": { 439 | "object-keys": "^1.0.12" 440 | } 441 | }, 442 | "delayed-stream": { 443 | "version": "1.0.0", 444 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 445 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 446 | }, 447 | "dom-walk": { 448 | "version": "0.1.2", 449 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", 450 | "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" 451 | }, 452 | "es-abstract": { 453 | "version": "1.14.2", 454 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz", 455 | "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==", 456 | "requires": { 457 | "es-to-primitive": "^1.2.0", 458 | "function-bind": "^1.1.1", 459 | "has": "^1.0.3", 460 | "has-symbols": "^1.0.0", 461 | "is-callable": "^1.1.4", 462 | "is-regex": "^1.0.4", 463 | "object-inspect": "^1.6.0", 464 | "object-keys": "^1.1.1", 465 | "string.prototype.trimleft": "^2.0.0", 466 | "string.prototype.trimright": "^2.0.0" 467 | } 468 | }, 469 | "es-to-primitive": { 470 | "version": "1.2.0", 471 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", 472 | "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", 473 | "requires": { 474 | "is-callable": "^1.1.4", 475 | "is-date-object": "^1.0.1", 476 | "is-symbol": "^1.0.2" 477 | } 478 | }, 479 | "event-target-shim": { 480 | "version": "5.0.1", 481 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 482 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 483 | }, 484 | "events": { 485 | "version": "3.0.0", 486 | "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", 487 | "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" 488 | }, 489 | "exif-parser": { 490 | "version": "0.1.12", 491 | "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", 492 | "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" 493 | }, 494 | "file-type": { 495 | "version": "9.0.0", 496 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", 497 | "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" 498 | }, 499 | "form-data": { 500 | "version": "2.5.1", 501 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", 502 | "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", 503 | "requires": { 504 | "asynckit": "^0.4.0", 505 | "combined-stream": "^1.0.6", 506 | "mime-types": "^2.1.12" 507 | } 508 | }, 509 | "function-bind": { 510 | "version": "1.1.1", 511 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 512 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 513 | }, 514 | "gifwrap": { 515 | "version": "0.9.2", 516 | "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.2.tgz", 517 | "integrity": "sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==", 518 | "requires": { 519 | "image-q": "^1.1.1", 520 | "omggif": "^1.0.10" 521 | } 522 | }, 523 | "global": { 524 | "version": "4.3.2", 525 | "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", 526 | "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", 527 | "requires": { 528 | "min-document": "^2.19.0", 529 | "process": "~0.5.1" 530 | } 531 | }, 532 | "has": { 533 | "version": "1.0.3", 534 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 535 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 536 | "requires": { 537 | "function-bind": "^1.1.1" 538 | } 539 | }, 540 | "has-symbols": { 541 | "version": "1.0.0", 542 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 543 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" 544 | }, 545 | "ieee754": { 546 | "version": "1.1.13", 547 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 548 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 549 | }, 550 | "image-q": { 551 | "version": "1.1.1", 552 | "resolved": "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz", 553 | "integrity": "sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=" 554 | }, 555 | "ip-regex": { 556 | "version": "2.1.0", 557 | "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", 558 | "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" 559 | }, 560 | "is-callable": { 561 | "version": "1.1.4", 562 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 563 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" 564 | }, 565 | "is-date-object": { 566 | "version": "1.0.1", 567 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 568 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" 569 | }, 570 | "is-function": { 571 | "version": "1.0.2", 572 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", 573 | "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" 574 | }, 575 | "is-regex": { 576 | "version": "1.0.4", 577 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 578 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 579 | "requires": { 580 | "has": "^1.0.1" 581 | } 582 | }, 583 | "is-symbol": { 584 | "version": "1.0.2", 585 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", 586 | "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", 587 | "requires": { 588 | "has-symbols": "^1.0.0" 589 | } 590 | }, 591 | "jimp": { 592 | "version": "0.13.0", 593 | "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.13.0.tgz", 594 | "integrity": "sha512-N/iG8L7Qe+AcHhrgcL0m7PTP/14iybmSIuOqCDvuel9gcIKEzxbbGuPCJVMchwXzusc2E7h9UjO9LZDfXb/09w==", 595 | "requires": { 596 | "@babel/runtime": "^7.7.2", 597 | "@jimp/custom": "^0.13.0", 598 | "@jimp/plugins": "^0.13.0", 599 | "@jimp/types": "^0.13.0", 600 | "regenerator-runtime": "^0.13.3" 601 | } 602 | }, 603 | "jpeg-js": { 604 | "version": "0.4.0", 605 | "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.0.tgz", 606 | "integrity": "sha512-960VHmtN1vTpasX/1LupLohdP5odwAT7oK/VSm6mW0M58LbrBnowLAPWAZhWGhDAGjzbMnPXZxzB/QYgBwkN0w==" 607 | }, 608 | "load-bmfont": { 609 | "version": "1.4.0", 610 | "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", 611 | "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==", 612 | "requires": { 613 | "buffer-equal": "0.0.1", 614 | "mime": "^1.3.4", 615 | "parse-bmfont-ascii": "^1.0.3", 616 | "parse-bmfont-binary": "^1.0.5", 617 | "parse-bmfont-xml": "^1.1.4", 618 | "phin": "^2.9.1", 619 | "xhr": "^2.0.1", 620 | "xtend": "^4.0.0" 621 | } 622 | }, 623 | "mime": { 624 | "version": "1.6.0", 625 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 626 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 627 | }, 628 | "mime-db": { 629 | "version": "1.40.0", 630 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 631 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" 632 | }, 633 | "mime-types": { 634 | "version": "2.1.24", 635 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 636 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 637 | "requires": { 638 | "mime-db": "1.40.0" 639 | } 640 | }, 641 | "min-document": { 642 | "version": "2.19.0", 643 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", 644 | "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", 645 | "requires": { 646 | "dom-walk": "^0.1.0" 647 | } 648 | }, 649 | "minimist": { 650 | "version": "1.2.5", 651 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 652 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 653 | }, 654 | "mkdirp": { 655 | "version": "0.5.5", 656 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 657 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 658 | "requires": { 659 | "minimist": "^1.2.5" 660 | } 661 | }, 662 | "node-fetch": { 663 | "version": "2.6.1", 664 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 665 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 666 | }, 667 | "object-inspect": { 668 | "version": "1.6.0", 669 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", 670 | "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" 671 | }, 672 | "object-keys": { 673 | "version": "1.1.1", 674 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 675 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 676 | }, 677 | "object.getownpropertydescriptors": { 678 | "version": "2.0.3", 679 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", 680 | "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", 681 | "requires": { 682 | "define-properties": "^1.1.2", 683 | "es-abstract": "^1.5.1" 684 | } 685 | }, 686 | "omggif": { 687 | "version": "1.0.10", 688 | "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", 689 | "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" 690 | }, 691 | "pako": { 692 | "version": "1.0.11", 693 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 694 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" 695 | }, 696 | "parse-bmfont-ascii": { 697 | "version": "1.0.6", 698 | "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", 699 | "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" 700 | }, 701 | "parse-bmfont-binary": { 702 | "version": "1.0.6", 703 | "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", 704 | "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" 705 | }, 706 | "parse-bmfont-xml": { 707 | "version": "1.1.4", 708 | "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", 709 | "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", 710 | "requires": { 711 | "xml-parse-from-string": "^1.0.0", 712 | "xml2js": "^0.4.5" 713 | } 714 | }, 715 | "parse-headers": { 716 | "version": "2.0.3", 717 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", 718 | "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" 719 | }, 720 | "phin": { 721 | "version": "2.9.3", 722 | "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", 723 | "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" 724 | }, 725 | "pixelmatch": { 726 | "version": "4.0.2", 727 | "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", 728 | "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", 729 | "requires": { 730 | "pngjs": "^3.0.0" 731 | } 732 | }, 733 | "pngjs": { 734 | "version": "3.4.0", 735 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", 736 | "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" 737 | }, 738 | "process": { 739 | "version": "0.5.2", 740 | "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", 741 | "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" 742 | }, 743 | "psl": { 744 | "version": "1.4.0", 745 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", 746 | "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" 747 | }, 748 | "punycode": { 749 | "version": "2.1.1", 750 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 751 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 752 | }, 753 | "regenerator-runtime": { 754 | "version": "0.13.5", 755 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", 756 | "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" 757 | }, 758 | "sax": { 759 | "version": "1.2.4", 760 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 761 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 762 | }, 763 | "string.prototype.trimleft": { 764 | "version": "2.1.0", 765 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", 766 | "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", 767 | "requires": { 768 | "define-properties": "^1.1.3", 769 | "function-bind": "^1.1.1" 770 | } 771 | }, 772 | "string.prototype.trimright": { 773 | "version": "2.1.0", 774 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", 775 | "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", 776 | "requires": { 777 | "define-properties": "^1.1.3", 778 | "function-bind": "^1.1.1" 779 | } 780 | }, 781 | "timm": { 782 | "version": "1.6.2", 783 | "resolved": "https://registry.npmjs.org/timm/-/timm-1.6.2.tgz", 784 | "integrity": "sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw==" 785 | }, 786 | "tinycolor2": { 787 | "version": "1.4.1", 788 | "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", 789 | "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" 790 | }, 791 | "tough-cookie": { 792 | "version": "3.0.1", 793 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", 794 | "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", 795 | "requires": { 796 | "ip-regex": "^2.1.0", 797 | "psl": "^1.1.28", 798 | "punycode": "^2.1.1" 799 | } 800 | }, 801 | "tslib": { 802 | "version": "1.10.0", 803 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 804 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" 805 | }, 806 | "tunnel": { 807 | "version": "0.0.6", 808 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 809 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" 810 | }, 811 | "utif": { 812 | "version": "2.0.1", 813 | "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", 814 | "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", 815 | "requires": { 816 | "pako": "^1.0.5" 817 | } 818 | }, 819 | "util.promisify": { 820 | "version": "1.0.0", 821 | "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", 822 | "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", 823 | "requires": { 824 | "define-properties": "^1.1.2", 825 | "object.getownpropertydescriptors": "^2.0.3" 826 | } 827 | }, 828 | "uuid": { 829 | "version": "3.3.3", 830 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", 831 | "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" 832 | }, 833 | "xhr": { 834 | "version": "2.5.0", 835 | "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", 836 | "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", 837 | "requires": { 838 | "global": "~4.3.0", 839 | "is-function": "^1.0.1", 840 | "parse-headers": "^2.0.0", 841 | "xtend": "^4.0.0" 842 | } 843 | }, 844 | "xml-parse-from-string": { 845 | "version": "1.0.1", 846 | "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", 847 | "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" 848 | }, 849 | "xml2js": { 850 | "version": "0.4.22", 851 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", 852 | "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", 853 | "requires": { 854 | "sax": ">=0.6.0", 855 | "util.promisify": "~1.0.0", 856 | "xmlbuilder": "~11.0.0" 857 | } 858 | }, 859 | "xmlbuilder": { 860 | "version": "11.0.1", 861 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 862 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" 863 | }, 864 | "xtend": { 865 | "version": "4.0.2", 866 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 867 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 868 | } 869 | } 870 | } 871 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "function-image-upload-resize-node", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "dependencies": { 7 | "@azure/storage-blob": "^10.3.0", 8 | "jimp": "^0.13.0" 9 | }, 10 | "devDependencies": {}, 11 | "scripts": { 12 | "test": "echo \"Error: no test specified\" && exit 1" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/Azure-Samples/storage-blob-resize-function-node-v10.git" 17 | }, 18 | "author": "", 19 | "license": "ISC", 20 | "bugs": { 21 | "url": "https://github.com/Azure-Samples/storage-blob-resize-function-node-v10/issues" 22 | }, 23 | "homepage": "https://github.com/Azure-Samples/storage-blob-resize-function-node-v10#readme" 24 | } 25 | --------------------------------------------------------------------------------