From b278c904d6cfb7eadceeaad5ff8087ad4cc58660 Mon Sep 17 00:00:00 2001 From: Yusuke Kuoka Date: Wed, 18 Nov 2020 14:26:22 +0900 Subject: [PATCH 1/2] Bump dependencies to address add-path deprecation --- lib/installer.js | 30 +- lib/setup-actions.js | 29 +- package-lock.json | 7140 +++++++++++++++++++++++++++++++++++++++++- package.json | 11 +- 4 files changed, 7149 insertions(+), 61 deletions(-) diff --git a/lib/installer.js b/lib/installer.js index 39e5164..6cb1dfb 100644 --- a/lib/installer.js +++ b/lib/installer.js @@ -1,20 +1,34 @@ "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; Object.defineProperty(exports, "__esModule", { value: true }); +exports.getTool = void 0; // Load tempDirectory before it gets wiped by tool-cache let tempDirectory = process.env['RUNNER_TEMPDIRECTORY'] || ''; const core = __importStar(require("@actions/core")); diff --git a/lib/setup-actions.js b/lib/setup-actions.js index 46e4a46..e368b03 100644 --- a/lib/setup-actions.js +++ b/lib/setup-actions.js @@ -1,19 +1,32 @@ "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; Object.defineProperty(exports, "__esModule", { value: true }); const core = __importStar(require("@actions/core")); const installer = __importStar(require("./installer")); diff --git a/package-lock.json b/package-lock.json index a1e31c3..a2c60b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,34 +1,6954 @@ { "name": "setup-go-actions", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@actions/core": "^1.2.6", + "@actions/tool-cache": "^1.5.5", + "semver": "^6.1.1", + "typed-rest-client": "^1.7.3" + }, + "devDependencies": { + "@actions/io": "^1.0.2", + "@types/jest": "^24.0.13", + "@types/nock": "^10.0.3", + "@types/node": "^12.0.4", + "@types/semver": "^6.0.0", + "husky": "^2.3.0", + "jest": "^24.8.0", + "jest-circus": "^24.7.1", + "nock": "^10.0.6", + "prettier": "^1.17.1", + "ts-jest": "^24.0.2", + "typescript": "^3.8.3" + } + }, + "node_modules/@actions/core": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.6.tgz", + "integrity": "sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==" + }, + "node_modules/@actions/exec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.0.tgz", + "integrity": "sha512-nquH0+XKng+Ll7rZfCojN7NWSbnGh+ltwUJhzfbLkmOJgxocGX2/yXcZLMyT9fa7+tByEow/NSTrBExNlEj9fw==" + }, + "node_modules/@actions/http-client": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.9.tgz", + "integrity": "sha512-0O4SsJ7q+MK0ycvXPl2e6bMXV7dxAXOGjrXS1eTF9s2S401Tp6c/P3c3Joz04QefC1J6Gt942Wl2jbm3f4mLcg==", + "dependencies": { + "tunnel": "0.0.6" + } + }, + "node_modules/@actions/io": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.2.tgz", + "integrity": "sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==" + }, + "node_modules/@actions/tool-cache": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.6.1.tgz", + "integrity": "sha512-F+vwEDwfqcHMKuSkj79pihOnsAMv23EkG76nMpc82UsnXwyQdyEsktGxrB0SNtm7pRqTXEIOoAPTgrSQclXYTg==", + "dependencies": { + "@actions/core": "^1.2.6", + "@actions/exec": "^1.0.0", + "@actions/http-client": "^1.0.8", + "@actions/io": "^1.0.1", + "semver": "^6.1.0", + "uuid": "^3.3.2" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/highlight": "^7.0.0" + } + }, + "node_modules/@babel/core": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", + "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" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@babel/core/node_modules/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 + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.5.5", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@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 + }, + "node_modules/@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, + "dependencies": { + "@babel/types": "^7.4.4" + } + }, + "node_modules/@babel/helpers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", + "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", + "dev": true, + "dependencies": { + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "node_modules/@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "dependencies": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "node_modules/@babel/traverse": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@babel/traverse/node_modules/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 + }, + "node_modules/@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@jest/console": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", + "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "dev": true, + "dependencies": { + "@jest/source-map": "^24.3.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jest/console/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@jest/core": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", + "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "dev": true, + "dependencies": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.8.0", + "jest-config": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve-dependencies": "^24.8.0", + "jest-runner": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "jest-watcher": "^24.8.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jest/environment": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", + "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jest/fake-timers": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", + "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "dev": true, + "dependencies": { + "@jest/types": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-mock": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jest/reporters": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", + "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "dev": true, + "dependencies": { + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.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.1.1", + "jest-haste-map": "^24.8.0", + "jest-resolve": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.2.1", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jest/reporters/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@jest/source-map": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", + "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jest/source-map/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@jest/test-result": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", + "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "dev": true, + "dependencies": { + "@jest/console": "^24.7.1", + "@jest/types": "^24.8.0", + "@types/istanbul-lib-coverage": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", + "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "dev": true, + "dependencies": { + "@jest/test-result": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-runner": "^24.8.0", + "jest-runtime": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jest/transform": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", + "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.8.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.8.0", + "jest-regex-util": "^24.3.0", + "jest-util": "^24.8.0", + "micromatch": "^3.1.10", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jest/transform/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@jest/types": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", + "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^12.0.9" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", + "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@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 + }, + "node_modules/@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, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@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, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "24.0.17", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.17.tgz", + "integrity": "sha512-1cy3xkOAfSYn78dsBWy4M3h/QF/HeWPchNFDjysVtp3GHeTdSmtluNnELfCmfNRRHo0OWEcpf+NsEJQvwQfdqQ==", + "dev": true, + "dependencies": { + "@types/jest-diff": "*" + } + }, + "node_modules/@types/jest-diff": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", + "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", + "dev": true + }, + "node_modules/@types/nock": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@types/nock/-/nock-10.0.3.tgz", + "integrity": "sha512-OthuN+2FuzfZO3yONJ/QVjKmLEuRagS9TV9lEId+WHL9KhftYG+/2z+pxlr0UgVVXSpVD8woie/3fzQn8ft/Ow==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "12.7.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.1.tgz", + "integrity": "sha512-aK9jxMypeSrhiYofWWBf/T7O+KwaiAHzM4sveCdWPn71lzUSMimRnKzhXDKfKwV1kWoBo2P1aGgaIYGLf9/ljw==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.1.tgz", + "integrity": "sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg==", + "dev": true + }, + "node_modules/@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 + }, + "node_modules/@types/yargs": { + "version": "12.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", + "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "dev": true + }, + "node_modules/acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz", + "integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==", + "dev": true, + "dependencies": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/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, + "dependencies": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/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 + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/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, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/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, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", + "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", + "dev": true, + "dependencies": { + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.6.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-jest/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", + "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "dev": true, + "dependencies": { + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-preset-jest": { + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", + "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.6.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/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, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", + "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "optional": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "cssom": "0.3.x" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/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, + "dependencies": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "node_modules/data-urls/node_modules/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, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/diff-sequences": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", + "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "dependencies": { + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/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, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/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, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", + "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "dev": true, + "dependencies": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", + "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", + "dev": true, + "dependencies": { + "@jest/types": "^24.8.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-regex-util": "^24.3.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/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, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/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, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/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 + }, + "node_modules/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 + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "bser": "^2.0.0" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/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, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/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, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "bundleDependencies": [ + "node-pre-gyp" + ], + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/fsevents/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/fsevents/node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fsevents/node_modules/chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/fsevents/node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fsevents/node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/fsevents/node_modules/fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^2.2.1" + } + }, + "node_modules/fsevents/node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "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" + } + }, + "node_modules/fsevents/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "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" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/fsevents/node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/fsevents/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/fsevents/node_modules/minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^2.2.1" + } + }, + "node_modules/fsevents/node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/fsevents/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/needle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/fsevents/node_modules/node-pre-gyp": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "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" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/fsevents/node_modules/nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/fsevents/node_modules/npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/npm-packlist": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "node_modules/fsevents/node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/fsevents/node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "inBundle": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/fsevents/node_modules/rc/node_modules/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "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" + } + }, + "node_modules/fsevents/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fsevents/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/fsevents/node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/fsevents/node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/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, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": "*" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", + "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==", + "dev": true + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.3.tgz", + "integrity": "sha512-gSxJXCMa4wZSq9YqCxcVWWtXw63FNFSx9XmDfet4IJg0vuiwxAdiLqbgxZty2/X5gHHd9F36v4VmEcAlZMgnGw==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "whatwg-encoding": "^1.0.1" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/husky": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-2.7.0.tgz", + "integrity": "sha512-LIi8zzT6PyFpcYKdvWRCn/8X+6SuG2TgYYMrM6ckEYhlp44UcEduVymZGIZNLiwOUjrEud+78w/AsAiqJA/kRg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "cosmiconfig": "^5.2.0", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^7.0.0", + "is-ci": "^2.0.0", + "pkg-dir": "^4.1.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^5.1.1", + "run-node": "^1.0.0", + "slash": "^3.0.0" + }, + "bin": { + "husky-upgrade": "lib/upgrader/bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/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, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/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 + }, + "node_modules/is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/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, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "has": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-report/node_modules/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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/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 + }, + "node_modules/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, + "dependencies": { + "handlebars": "^4.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", + "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", + "dev": true, + "dependencies": { + "import-local": "^2.0.0", + "jest-cli": "^24.8.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-changed-files": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", + "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", + "dev": true, + "dependencies": { + "@jest/types": "^24.8.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-circus": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-24.8.0.tgz", + "integrity": "sha512-2QASG3QuDdk0SMP2O73D8u3/lc/A/E2G7q23v5WhbUR+hCGzWZXwRMKif18f11dSLfL1wcrMbwE4IorvV0DRVw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.8.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0", + "stack-utils": "^1.0.1", + "throat": "^4.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-config": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", + "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.8.0", + "@jest/types": "^24.8.0", + "babel-jest": "^24.8.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.8.0", + "jest-environment-node": "^24.8.0", + "jest-get-type": "^24.8.0", + "jest-jasmine2": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.8.0", + "realpath-native": "^1.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-diff": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", + "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1", + "diff-sequences": "^24.3.0", + "jest-get-type": "^24.8.0", + "pretty-format": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-docblock": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", + "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "dev": true, + "dependencies": { + "detect-newline": "^2.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-each": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", + "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", + "dev": true, + "dependencies": { + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", + "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^24.8.0", + "@jest/fake-timers": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-util": "^24.8.0", + "jsdom": "^11.5.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-environment-node": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", + "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^24.8.0", + "@jest/fake-timers": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-util": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-get-type": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", + "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-haste-map": { + "version": "24.8.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.1.tgz", + "integrity": "sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==", + "dev": true, + "dependencies": { + "@jest/types": "^24.8.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.4.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 6" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/jest-jasmine2": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", + "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.8.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0", + "throat": "^4.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-leak-detector": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", + "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", + "dev": true, + "dependencies": { + "pretty-format": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-matcher-utils": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", + "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1", + "jest-diff": "^24.8.0", + "jest-get-type": "^24.8.0", + "pretty-format": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-message-util": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", + "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-message-util/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-mock": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", + "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "dev": true, + "dependencies": { + "@jest/types": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-regex-util": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", + "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-resolve": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "dev": true, + "dependencies": { + "@jest/types": "^24.8.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", + "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", + "dev": true, + "dependencies": { + "@jest/types": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-runner": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", + "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", + "dev": true, + "dependencies": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.8.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.8.0", + "jest-jasmine2": "^24.8.0", + "jest-leak-detector": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-resolve": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-runtime": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", + "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", + "dev": true, + "dependencies": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.8.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/yargs": "^12.0.2", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^12.0.2" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-runtime/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-serializer": { + "version": "24.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", + "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-snapshot": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", + "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "expect": "^24.8.0", + "jest-diff": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-resolve": "^24.8.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.8.0", + "semver": "^5.5.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jest-util": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", + "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", + "dev": true, + "dependencies": { + "@jest/console": "^24.7.1", + "@jest/fake-timers": "^24.8.0", + "@jest/source-map": "^24.3.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.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" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-util/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-util/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-validate": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", + "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "dev": true, + "dependencies": { + "@jest/types": "^24.8.0", + "camelcase": "^5.0.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.8.0", + "leven": "^2.1.0", + "pretty-format": "^24.8.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-watcher": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", + "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/yargs": "^12.0.9", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.8.0", + "string-length": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-worker": { + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", + "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "dev": true, + "dependencies": { + "merge-stream": "^1.0.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-worker/node_modules/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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest/node_modules/jest-cli": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", + "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "dev": true, + "dependencies": { + "@jest/core": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^12.0.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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 + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "dependencies": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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 + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "node_modules/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 + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "dependencies": { + "invert-kv": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "node_modules/leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/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, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/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, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "dependencies": { + "mime-db": "1.40.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/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, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "node_modules/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_modules/nock": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-10.0.6.tgz", + "integrity": "sha512-b47OWj1qf/LqSQYnmokNWM8D88KvUl2y7jT0567NB3ZBAZFz2bWp2PC81Xn7u8F2/vJxzkzNZybnemeFa7AZ2w==", + "dev": true, + "dependencies": { + "chai": "^4.1.2", + "debug": "^4.1.0", + "deep-equal": "^1.0.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.5", + "mkdirp": "^0.5.0", + "propagate": "^1.0.0", + "qs": "^6.5.1", + "semver": "^5.5.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/nock/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nock/node_modules/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 + }, + "node_modules/nock/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/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_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-notifier": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.1.tgz", + "integrity": "sha512-p52B+onAEHKW1OF9MGO/S7k/ahGEHfhP5/tvwYzog/5XLYOd8ZuD6vdNZdUuWMONRnKPneXV43v3s6Snx1wsCQ==", + "dev": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node_modules/node-notifier/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/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, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/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, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/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, + "engines": { + "node": "*" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "node_modules/optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/optionator/node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "dependencies": { + "p-reduce": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", + "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-format": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", + "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "dev": true, + "dependencies": { + "@jest/types": "^24.8.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/propagate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz", + "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=", + "dev": true, + "engines": [ + "node >= 0.8.1" + ] + }, + "node_modules/psl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", + "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/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 + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-pkg-up/node_modules/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, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "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" + } + }, + "node_modules/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, + "dependencies": { + "util.promisify": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/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, + "dependencies": { + "lodash": "^4.17.11" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/request/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/request/node_modules/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, + "dependencies": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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 + }, + "node_modules/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, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", + "dev": true, + "bin": { + "run-node": "run-node" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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 + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "dependencies": { + "@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" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/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, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "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" + } + }, + "node_modules/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, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/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 + }, + "node_modules/spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "dependencies": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-length/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-length/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-jest": { + "version": "24.0.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz", + "integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ts-jest/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "dependencies": { + "camelcase": "^4.1.0" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.0.tgz", + "integrity": "sha512-Nu1MrdH6ECrRW5gHoRAdubgCs4oH6q5/J76jsEC8bVDfvVoVPkigukPalhMHPwb7ZvpsZqPptd5zpt/QdtrdBw==", + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "1.8.3" + } + }, + "node_modules/typed-rest-client/node_modules/qs": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/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, + "dependencies": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "node_modules/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, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/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, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "node_modules/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, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/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, + "dependencies": { + "browser-process-hrtime": "^0.1.2" + } + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/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 + }, + "node_modules/whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/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 + }, + "node_modules/wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/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, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/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, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/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, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/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 + }, + "node_modules/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 + }, + "node_modules/yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "dependencies": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "node_modules/yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs/node_modules/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 + } + }, "dependencies": { "@actions/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.0.0.tgz", - "integrity": "sha512-aMIlkx96XH4E/2YZtEOeyrYQfhlas9jIRkfGPqMwXD095Rdkzo4lB6ZmbxPQSzD+e1M+Xsm98ZhuSMYGv/AlqA==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.6.tgz", + "integrity": "sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==" }, "@actions/exec": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.0.tgz", "integrity": "sha512-nquH0+XKng+Ll7rZfCojN7NWSbnGh+ltwUJhzfbLkmOJgxocGX2/yXcZLMyT9fa7+tByEow/NSTrBExNlEj9fw==" }, + "@actions/http-client": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.9.tgz", + "integrity": "sha512-0O4SsJ7q+MK0ycvXPl2e6bMXV7dxAXOGjrXS1eTF9s2S401Tp6c/P3c3Joz04QefC1J6Gt942Wl2jbm3f4mLcg==", + "requires": { + "tunnel": "0.0.6" + } + }, "@actions/io": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.0.tgz", - "integrity": "sha512-ezrJSRdqtXtdx1WXlfYL85+40F7gB39jCK9P0jZVODW3W6xUYmu6ZOEc/UmmElUwhRyDRm1R4yNZu1Joq2kuQg==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.2.tgz", + "integrity": "sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==" }, "@actions/tool-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.0.0.tgz", - "integrity": "sha512-l3zT0IfDfi5Ik5aMpnXqGHGATxN8xa9ls4ue+X/CBXpPhRMRZS4vcuh5Q9T98WAGbkysRCfhpbksTPHIcKnNwQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.6.1.tgz", + "integrity": "sha512-F+vwEDwfqcHMKuSkj79pihOnsAMv23EkG76nMpc82UsnXwyQdyEsktGxrB0SNtm7pRqTXEIOoAPTgrSQclXYTg==", "requires": { - "@actions/core": "^1.0.0", + "@actions/core": "^1.2.6", "@actions/exec": "^1.0.0", - "@actions/io": "^1.0.0", + "@actions/http-client": "^1.0.8", + "@actions/io": "^1.0.1", "semver": "^6.1.0", - "typed-rest-client": "^1.4.0", "uuid": "^3.3.2" } }, @@ -1778,24 +8698,32 @@ "dependencies": { "abbrev": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "bundled": true, "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "bundled": true, "dev": true, "optional": true }, "aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "bundled": true, "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "bundled": true, "dev": true, "optional": true, @@ -1806,12 +8734,16 @@ }, "balanced-match": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "bundled": true, "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "bundled": true, "dev": true, "optional": true, @@ -1822,36 +8754,48 @@ }, "chownr": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "bundled": true, "dev": true, "optional": 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=", "bundled": true, "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "bundled": true, "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "bundled": true, "dev": true, "optional": 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=", "bundled": true, "dev": true, "optional": true }, "debug": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "bundled": true, "dev": true, "optional": true, @@ -1861,24 +8805,32 @@ }, "deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "bundled": true, "dev": true, "optional": true }, "delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "bundled": true, "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "bundled": true, "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "bundled": true, "dev": true, "optional": true, @@ -1888,12 +8840,16 @@ }, "fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "bundled": true, "dev": true, "optional": true }, "gauge": { "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "bundled": true, "dev": true, "optional": true, @@ -1910,6 +8866,8 @@ }, "glob": { "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "bundled": true, "dev": true, "optional": true, @@ -1924,12 +8882,16 @@ }, "has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "bundled": true, "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "bundled": true, "dev": true, "optional": true, @@ -1939,6 +8901,8 @@ }, "ignore-walk": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "bundled": true, "dev": true, "optional": true, @@ -1948,6 +8912,8 @@ }, "inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "bundled": true, "dev": true, "optional": true, @@ -1958,18 +8924,24 @@ }, "inherits": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "bundled": true, "dev": true, "optional": true }, "ini": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "bundled": true, "dev": true, "optional": 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=", "bundled": true, "dev": true, "optional": true, @@ -1979,12 +8951,16 @@ }, "isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "bundled": true, "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "bundled": true, "dev": true, "optional": true, @@ -1994,12 +8970,16 @@ }, "minimist": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "bundled": true, "dev": true, "optional": true }, "minipass": { "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "bundled": true, "dev": true, "optional": true, @@ -2010,6 +8990,8 @@ }, "minizlib": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "bundled": true, "dev": true, "optional": true, @@ -2019,6 +9001,8 @@ }, "mkdirp": { "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "bundled": true, "dev": true, "optional": true, @@ -2028,12 +9012,16 @@ }, "ms": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "bundled": true, "dev": true, "optional": true }, "needle": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", "bundled": true, "dev": true, "optional": true, @@ -2045,6 +9033,8 @@ }, "node-pre-gyp": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "bundled": true, "dev": true, "optional": true, @@ -2063,6 +9053,8 @@ }, "nopt": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "bundled": true, "dev": true, "optional": true, @@ -2073,12 +9065,16 @@ }, "npm-bundled": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "bundled": true, "dev": true, "optional": true, @@ -2089,6 +9085,8 @@ }, "npmlog": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "bundled": true, "dev": true, "optional": true, @@ -2101,18 +9099,24 @@ }, "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=", "bundled": true, "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "bundled": true, "dev": true, "optional": true }, "once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "bundled": true, "dev": true, "optional": true, @@ -2122,18 +9126,24 @@ }, "os-homedir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "bundled": true, "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "bundled": true, "dev": true, "optional": true }, "osenv": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "bundled": true, "dev": true, "optional": true, @@ -2144,18 +9154,24 @@ }, "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=", "bundled": true, "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "bundled": true, "dev": true, "optional": true }, "rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "bundled": true, "dev": true, "optional": true, @@ -2168,6 +9184,8 @@ "dependencies": { "minimist": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "bundled": true, "dev": true, "optional": true @@ -2176,6 +9194,8 @@ }, "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==", "bundled": true, "dev": true, "optional": true, @@ -2191,6 +9211,8 @@ }, "rimraf": { "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "bundled": true, "dev": true, "optional": true, @@ -2200,62 +9222,80 @@ }, "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==", "bundled": true, "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "bundled": true, "dev": true, "optional": true }, "sax": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "bundled": true, "dev": true, "optional": true }, "semver": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "bundled": true, "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "bundled": true, "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "bundled": true, "dev": true, "optional": true }, - "string-width": { - "version": "1.0.2", + "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==", "bundled": true, "dev": true, "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "safe-buffer": "~5.1.0" } }, - "string_decoder": { - "version": "1.1.1", + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "bundled": true, "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "bundled": true, "dev": true, "optional": true, @@ -2265,12 +9305,16 @@ }, "strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "bundled": true, "dev": true, "optional": true }, "tar": { "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "bundled": true, "dev": true, "optional": true, @@ -2286,12 +9330,16 @@ }, "util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "bundled": true, "dev": true, "optional": true }, "wide-align": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "bundled": true, "dev": true, "optional": true, @@ -2301,12 +9349,16 @@ }, "wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "bundled": true, "dev": true, "optional": 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==", "bundled": true, "dev": true, "optional": true @@ -4936,6 +11988,15 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true }, + "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" + } + }, "string-length": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", @@ -4990,15 +12051,6 @@ } } }, - "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": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -5173,9 +12225,9 @@ } }, "tunnel": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", - "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" }, "tunnel-agent": { "version": "0.6.0", @@ -5214,18 +12266,26 @@ "dev": true }, "typed-rest-client": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.5.0.tgz", - "integrity": "sha512-DVZRlmsfnTjp6ZJaatcdyvvwYwbWvR4YDNFDqb+qdTxpvaVP99YCpBkA8rxsLtAPjBVoDe4fNsnMIdZTiPuKWg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.0.tgz", + "integrity": "sha512-Nu1MrdH6ECrRW5gHoRAdubgCs4oH6q5/J76jsEC8bVDfvVoVPkigukPalhMHPwb7ZvpsZqPptd5zpt/QdtrdBw==", "requires": { - "tunnel": "0.0.4", + "qs": "^6.9.1", + "tunnel": "0.0.6", "underscore": "1.8.3" + }, + "dependencies": { + "qs": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" + } } }, "typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 3d76a76..7cd617c 100644 --- a/package.json +++ b/package.json @@ -22,12 +22,13 @@ "author": "GitHub", "license": "MIT", "dependencies": { - "@actions/core": "^1.0.0", - "@actions/tool-cache": "^1.0.0", - "semver": "^6.1.1" + "@actions/core": "^1.2.6", + "@actions/tool-cache": "^1.5.5", + "semver": "^6.1.1", + "typed-rest-client": "^1.7.3" }, "devDependencies": { - "@actions/io": "^1.0.0", + "@actions/io": "^1.0.2", "@types/jest": "^24.0.13", "@types/nock": "^10.0.3", "@types/node": "^12.0.4", @@ -38,7 +39,7 @@ "nock": "^10.0.6", "prettier": "^1.17.1", "ts-jest": "^24.0.2", - "typescript": "^3.5.1" + "typescript": "^3.8.3" }, "husky": { "skipCI": true, From 1cce5be03a181f9539af38d0005e25c9ae636a9b Mon Sep 17 00:00:00 2001 From: Yusuke Kuoka Date: Wed, 18 Nov 2020 14:26:34 +0900 Subject: [PATCH 2/2] Husky commit correct node modules --- node_modules/@actions/core/LICENSE.md | 2 + node_modules/@actions/core/README.md | 110 +- node_modules/@actions/core/lib/command.d.ts | 12 +- node_modules/@actions/core/lib/command.js | 53 +- node_modules/@actions/core/lib/command.js.map | 2 +- node_modules/@actions/core/lib/core.d.ts | 77 +- node_modules/@actions/core/lib/core.js | 160 +- node_modules/@actions/core/lib/core.js.map | 2 +- .../@actions/core/lib/file-command.d.ts | 1 + .../@actions/core/lib/file-command.js | 29 + .../@actions/core/lib/file-command.js.map | 1 + node_modules/@actions/core/lib/utils.d.ts | 5 + node_modules/@actions/core/lib/utils.js | 19 + node_modules/@actions/core/lib/utils.js.map | 1 + node_modules/@actions/core/package.json | 67 +- node_modules/@actions/http-client/LICENSE | 21 + node_modules/@actions/http-client/README.md | 79 + node_modules/@actions/http-client/RELEASES.md | 22 + node_modules/@actions/http-client/actions.png | Bin 0 -> 33889 bytes node_modules/@actions/http-client/auth.d.ts | 23 + node_modules/@actions/http-client/auth.js | 58 + node_modules/@actions/http-client/index.d.ts | 124 + node_modules/@actions/http-client/index.js | 535 ++++ .../@actions/http-client/interfaces.d.ts | 49 + .../@actions/http-client/interfaces.js | 2 + .../@actions/http-client/package.json | 39 + node_modules/@actions/http-client/proxy.d.ts | 2 + node_modules/@actions/http-client/proxy.js | 57 + node_modules/@actions/io/LICENSE.md | 7 - node_modules/@actions/io/README.md | 8 +- node_modules/@actions/io/lib/io-util.js | 3 +- node_modules/@actions/io/lib/io-util.js.map | 2 +- node_modules/@actions/io/lib/io.js | 7 +- node_modules/@actions/io/lib/io.js.map | 2 +- node_modules/@actions/io/package.json | 58 +- node_modules/@actions/tool-cache/LICENSE.md | 2 + node_modules/@actions/tool-cache/README.md | 32 +- .../@actions/tool-cache/lib/manifest.d.ts | 16 + .../@actions/tool-cache/lib/manifest.js | 106 + .../@actions/tool-cache/lib/manifest.js.map | 1 + .../@actions/tool-cache/lib/retry-helper.d.ts | 12 + .../@actions/tool-cache/lib/retry-helper.js | 70 + .../tool-cache/lib/retry-helper.js.map | 1 + .../@actions/tool-cache/lib/tool-cache.d.ts | 23 +- .../@actions/tool-cache/lib/tool-cache.js | 354 ++- .../@actions/tool-cache/lib/tool-cache.js.map | 2 +- node_modules/@actions/tool-cache/package.json | 85 +- .../tool-cache/scripts/externals/unzip | Bin 174216 -> 0 bytes node_modules/tunnel/.npmignore | 2 - node_modules/tunnel/.travis.yml | 6 + node_modules/tunnel/CHANGELOG.md | 9 + node_modules/tunnel/README.md | 14 +- node_modules/tunnel/lib/tunnel.js | 35 +- node_modules/tunnel/package.json | 64 +- node_modules/tunnel/test/http-over-http.js | 108 - node_modules/tunnel/test/http-over-https.js | 130 - node_modules/tunnel/test/https-over-http.js | 130 - .../tunnel/test/https-over-https-error.js | 261 -- node_modules/tunnel/test/https-over-https.js | 146 - node_modules/tunnel/test/keys/Makefile | 157 - node_modules/tunnel/test/keys/agent1-cert.pem | 14 - node_modules/tunnel/test/keys/agent1-csr.pem | 10 - node_modules/tunnel/test/keys/agent1-key.pem | 9 - node_modules/tunnel/test/keys/agent1.cnf | 19 - node_modules/tunnel/test/keys/agent2-cert.pem | 13 - node_modules/tunnel/test/keys/agent2-csr.pem | 10 - node_modules/tunnel/test/keys/agent2-key.pem | 9 - node_modules/tunnel/test/keys/agent2.cnf | 19 - node_modules/tunnel/test/keys/agent3-cert.pem | 14 - node_modules/tunnel/test/keys/agent3-csr.pem | 10 - node_modules/tunnel/test/keys/agent3-key.pem | 9 - node_modules/tunnel/test/keys/agent3.cnf | 19 - node_modules/tunnel/test/keys/agent4-cert.pem | 15 - node_modules/tunnel/test/keys/agent4-csr.pem | 10 - node_modules/tunnel/test/keys/agent4-key.pem | 9 - node_modules/tunnel/test/keys/agent4.cnf | 21 - node_modules/tunnel/test/keys/ca1-cert.pem | 14 - node_modules/tunnel/test/keys/ca1-cert.srl | 1 - node_modules/tunnel/test/keys/ca1-key.pem | 17 - node_modules/tunnel/test/keys/ca1.cnf | 17 - node_modules/tunnel/test/keys/ca2-cert.pem | 14 - node_modules/tunnel/test/keys/ca2-cert.srl | 1 - node_modules/tunnel/test/keys/ca2-crl.pem | 10 - .../tunnel/test/keys/ca2-database.txt | 1 - node_modules/tunnel/test/keys/ca2-key.pem | 17 - node_modules/tunnel/test/keys/ca2-serial | 1 - node_modules/tunnel/test/keys/ca2.cnf | 17 - node_modules/tunnel/test/keys/ca3-cert.pem | 14 - node_modules/tunnel/test/keys/ca3-cert.srl | 1 - node_modules/tunnel/test/keys/ca3-key.pem | 17 - node_modules/tunnel/test/keys/ca3.cnf | 17 - node_modules/tunnel/test/keys/ca4-cert.pem | 14 - node_modules/tunnel/test/keys/ca4-cert.srl | 1 - node_modules/tunnel/test/keys/ca4-key.pem | 17 - node_modules/tunnel/test/keys/ca4.cnf | 17 - node_modules/tunnel/test/keys/client.cnf | 16 - .../tunnel/test/keys/client1-cert.pem | 14 - node_modules/tunnel/test/keys/client1-csr.pem | 12 - node_modules/tunnel/test/keys/client1-key.pem | 15 - node_modules/tunnel/test/keys/client1.cnf | 16 - .../tunnel/test/keys/client2-cert.pem | 14 - node_modules/tunnel/test/keys/client2-csr.pem | 12 - node_modules/tunnel/test/keys/client2-key.pem | 15 - node_modules/tunnel/test/keys/client2.cnf | 16 - node_modules/tunnel/test/keys/proxy1-cert.pem | 14 - node_modules/tunnel/test/keys/proxy1-csr.pem | 12 - node_modules/tunnel/test/keys/proxy1-key.pem | 15 - node_modules/tunnel/test/keys/proxy1.cnf | 16 - node_modules/tunnel/test/keys/proxy2-cert.pem | 14 - node_modules/tunnel/test/keys/proxy2-csr.pem | 12 - node_modules/tunnel/test/keys/proxy2-key.pem | 15 - node_modules/tunnel/test/keys/proxy2.cnf | 16 - .../tunnel/test/keys/server1-cert.pem | 14 - node_modules/tunnel/test/keys/server1-csr.pem | 12 - node_modules/tunnel/test/keys/server1-key.pem | 15 - node_modules/tunnel/test/keys/server1.cnf | 16 - .../tunnel/test/keys/server2-cert.pem | 14 - node_modules/tunnel/test/keys/server2-csr.pem | 12 - node_modules/tunnel/test/keys/server2-key.pem | 15 - node_modules/tunnel/test/keys/server2.cnf | 16 - node_modules/tunnel/test/keys/test.js | 43 - node_modules/typed-rest-client/Handlers.d.ts | 8 +- node_modules/typed-rest-client/Handlers.js | 20 +- .../typed-rest-client/HttpClient.d.ts | 208 +- node_modules/typed-rest-client/HttpClient.js | 952 +++--- node_modules/typed-rest-client/Index.d.ts | 1 + node_modules/typed-rest-client/Index.js | 4 +- .../typed-rest-client/Interfaces.d.ts | 136 +- node_modules/typed-rest-client/Interfaces.js | 10 +- node_modules/typed-rest-client/LICENSE | 60 +- node_modules/typed-rest-client/README.md | 210 +- .../typed-rest-client/RestClient.d.ts | 155 +- node_modules/typed-rest-client/RestClient.js | 434 +-- .../typed-rest-client/ThirdPartyNotice.txt | 2636 ++++++++--------- node_modules/typed-rest-client/Util.d.ts | 35 +- node_modules/typed-rest-client/Util.js | 154 +- .../handlers/basiccreds.d.ts | 20 +- .../typed-rest-client/handlers/basiccreds.js | 55 +- .../handlers/bearertoken.d.ts | 18 +- .../typed-rest-client/handlers/bearertoken.js | 53 +- .../typed-rest-client/handlers/ntlm.d.ts | 26 +- .../typed-rest-client/handlers/ntlm.js | 274 +- .../handlers/personalaccesstoken.d.ts | 18 +- .../handlers/personalaccesstoken.js | 53 +- .../node_modules/qs/.editorconfig | 33 + .../node_modules/qs/.eslintignore | 1 + .../node_modules/qs/.eslintrc | 21 + .../node_modules/qs/.github/FUNDING.yml | 12 + .../qs/.github/workflows/rebase.yml | 15 + .../node_modules/qs/CHANGELOG.md | 345 +++ .../node_modules/qs/LICENSE.md | 29 + .../node_modules/qs/README.md | 604 ++++ .../node_modules/qs/dist/qs.js | 825 ++++++ .../node_modules/qs/lib/formats.js | 26 + .../node_modules/qs/lib/index.js | 11 + .../node_modules/qs/lib/parse.js | 257 ++ .../node_modules/qs/lib/stringify.js | 271 ++ .../node_modules/qs/lib/utils.js | 248 ++ .../node_modules/qs/package.json | 69 + .../node_modules/qs/test/.eslintrc | 18 + .../node_modules/qs/test/index.js | 7 + .../node_modules/qs/test/parse.js | 772 +++++ .../node_modules/qs/test/stringify.js | 750 +++++ .../node_modules/qs/test/utils.js | 136 + .../opensource/Node-SMB/README.md | 5 + .../opensource/Node-SMB/lib/common.js | 61 + .../opensource/Node-SMB/lib/ntlm.js | 220 ++ .../opensource/Node-SMB/lib/smbhash.js | 64 + .../opensource/node-http-ntlm/ntlm.js | 389 --- .../opensource/node-http-ntlm/readme.txt | 6 - node_modules/typed-rest-client/package.json | 120 +- node_modules/underscore/package.json | 77 +- 172 files changed, 9810 insertions(+), 5346 deletions(-) create mode 100644 node_modules/@actions/core/lib/file-command.d.ts create mode 100644 node_modules/@actions/core/lib/file-command.js create mode 100644 node_modules/@actions/core/lib/file-command.js.map create mode 100644 node_modules/@actions/core/lib/utils.d.ts create mode 100644 node_modules/@actions/core/lib/utils.js create mode 100644 node_modules/@actions/core/lib/utils.js.map create mode 100644 node_modules/@actions/http-client/LICENSE create mode 100644 node_modules/@actions/http-client/README.md create mode 100644 node_modules/@actions/http-client/RELEASES.md create mode 100644 node_modules/@actions/http-client/actions.png create mode 100644 node_modules/@actions/http-client/auth.d.ts create mode 100644 node_modules/@actions/http-client/auth.js create mode 100644 node_modules/@actions/http-client/index.d.ts create mode 100644 node_modules/@actions/http-client/index.js create mode 100644 node_modules/@actions/http-client/interfaces.d.ts create mode 100644 node_modules/@actions/http-client/interfaces.js create mode 100644 node_modules/@actions/http-client/package.json create mode 100644 node_modules/@actions/http-client/proxy.d.ts create mode 100644 node_modules/@actions/http-client/proxy.js delete mode 100644 node_modules/@actions/io/LICENSE.md create mode 100644 node_modules/@actions/tool-cache/lib/manifest.d.ts create mode 100644 node_modules/@actions/tool-cache/lib/manifest.js create mode 100644 node_modules/@actions/tool-cache/lib/manifest.js.map create mode 100644 node_modules/@actions/tool-cache/lib/retry-helper.d.ts create mode 100644 node_modules/@actions/tool-cache/lib/retry-helper.js create mode 100644 node_modules/@actions/tool-cache/lib/retry-helper.js.map delete mode 100644 node_modules/@actions/tool-cache/scripts/externals/unzip delete mode 100644 node_modules/tunnel/.npmignore create mode 100644 node_modules/tunnel/.travis.yml delete mode 100644 node_modules/tunnel/test/http-over-http.js delete mode 100644 node_modules/tunnel/test/http-over-https.js delete mode 100644 node_modules/tunnel/test/https-over-http.js delete mode 100644 node_modules/tunnel/test/https-over-https-error.js delete mode 100644 node_modules/tunnel/test/https-over-https.js delete mode 100644 node_modules/tunnel/test/keys/Makefile delete mode 100644 node_modules/tunnel/test/keys/agent1-cert.pem delete mode 100644 node_modules/tunnel/test/keys/agent1-csr.pem delete mode 100644 node_modules/tunnel/test/keys/agent1-key.pem delete mode 100644 node_modules/tunnel/test/keys/agent1.cnf delete mode 100644 node_modules/tunnel/test/keys/agent2-cert.pem delete mode 100644 node_modules/tunnel/test/keys/agent2-csr.pem delete mode 100644 node_modules/tunnel/test/keys/agent2-key.pem delete mode 100644 node_modules/tunnel/test/keys/agent2.cnf delete mode 100644 node_modules/tunnel/test/keys/agent3-cert.pem delete mode 100644 node_modules/tunnel/test/keys/agent3-csr.pem delete mode 100644 node_modules/tunnel/test/keys/agent3-key.pem delete mode 100644 node_modules/tunnel/test/keys/agent3.cnf delete mode 100644 node_modules/tunnel/test/keys/agent4-cert.pem delete mode 100644 node_modules/tunnel/test/keys/agent4-csr.pem delete mode 100644 node_modules/tunnel/test/keys/agent4-key.pem delete mode 100644 node_modules/tunnel/test/keys/agent4.cnf delete mode 100644 node_modules/tunnel/test/keys/ca1-cert.pem delete mode 100644 node_modules/tunnel/test/keys/ca1-cert.srl delete mode 100644 node_modules/tunnel/test/keys/ca1-key.pem delete mode 100644 node_modules/tunnel/test/keys/ca1.cnf delete mode 100644 node_modules/tunnel/test/keys/ca2-cert.pem delete mode 100644 node_modules/tunnel/test/keys/ca2-cert.srl delete mode 100644 node_modules/tunnel/test/keys/ca2-crl.pem delete mode 100644 node_modules/tunnel/test/keys/ca2-database.txt delete mode 100644 node_modules/tunnel/test/keys/ca2-key.pem delete mode 100644 node_modules/tunnel/test/keys/ca2-serial delete mode 100644 node_modules/tunnel/test/keys/ca2.cnf delete mode 100644 node_modules/tunnel/test/keys/ca3-cert.pem delete mode 100644 node_modules/tunnel/test/keys/ca3-cert.srl delete mode 100644 node_modules/tunnel/test/keys/ca3-key.pem delete mode 100644 node_modules/tunnel/test/keys/ca3.cnf delete mode 100644 node_modules/tunnel/test/keys/ca4-cert.pem delete mode 100644 node_modules/tunnel/test/keys/ca4-cert.srl delete mode 100644 node_modules/tunnel/test/keys/ca4-key.pem delete mode 100644 node_modules/tunnel/test/keys/ca4.cnf delete mode 100644 node_modules/tunnel/test/keys/client.cnf delete mode 100644 node_modules/tunnel/test/keys/client1-cert.pem delete mode 100644 node_modules/tunnel/test/keys/client1-csr.pem delete mode 100644 node_modules/tunnel/test/keys/client1-key.pem delete mode 100644 node_modules/tunnel/test/keys/client1.cnf delete mode 100644 node_modules/tunnel/test/keys/client2-cert.pem delete mode 100644 node_modules/tunnel/test/keys/client2-csr.pem delete mode 100644 node_modules/tunnel/test/keys/client2-key.pem delete mode 100644 node_modules/tunnel/test/keys/client2.cnf delete mode 100644 node_modules/tunnel/test/keys/proxy1-cert.pem delete mode 100644 node_modules/tunnel/test/keys/proxy1-csr.pem delete mode 100644 node_modules/tunnel/test/keys/proxy1-key.pem delete mode 100644 node_modules/tunnel/test/keys/proxy1.cnf delete mode 100644 node_modules/tunnel/test/keys/proxy2-cert.pem delete mode 100644 node_modules/tunnel/test/keys/proxy2-csr.pem delete mode 100644 node_modules/tunnel/test/keys/proxy2-key.pem delete mode 100644 node_modules/tunnel/test/keys/proxy2.cnf delete mode 100644 node_modules/tunnel/test/keys/server1-cert.pem delete mode 100644 node_modules/tunnel/test/keys/server1-csr.pem delete mode 100644 node_modules/tunnel/test/keys/server1-key.pem delete mode 100644 node_modules/tunnel/test/keys/server1.cnf delete mode 100644 node_modules/tunnel/test/keys/server2-cert.pem delete mode 100644 node_modules/tunnel/test/keys/server2-csr.pem delete mode 100644 node_modules/tunnel/test/keys/server2-key.pem delete mode 100644 node_modules/tunnel/test/keys/server2.cnf delete mode 100644 node_modules/tunnel/test/keys/test.js create mode 100644 node_modules/typed-rest-client/node_modules/qs/.editorconfig create mode 100644 node_modules/typed-rest-client/node_modules/qs/.eslintignore create mode 100644 node_modules/typed-rest-client/node_modules/qs/.eslintrc create mode 100644 node_modules/typed-rest-client/node_modules/qs/.github/FUNDING.yml create mode 100644 node_modules/typed-rest-client/node_modules/qs/.github/workflows/rebase.yml create mode 100644 node_modules/typed-rest-client/node_modules/qs/CHANGELOG.md create mode 100644 node_modules/typed-rest-client/node_modules/qs/LICENSE.md create mode 100644 node_modules/typed-rest-client/node_modules/qs/README.md create mode 100644 node_modules/typed-rest-client/node_modules/qs/dist/qs.js create mode 100644 node_modules/typed-rest-client/node_modules/qs/lib/formats.js create mode 100644 node_modules/typed-rest-client/node_modules/qs/lib/index.js create mode 100644 node_modules/typed-rest-client/node_modules/qs/lib/parse.js create mode 100644 node_modules/typed-rest-client/node_modules/qs/lib/stringify.js create mode 100644 node_modules/typed-rest-client/node_modules/qs/lib/utils.js create mode 100644 node_modules/typed-rest-client/node_modules/qs/package.json create mode 100644 node_modules/typed-rest-client/node_modules/qs/test/.eslintrc create mode 100644 node_modules/typed-rest-client/node_modules/qs/test/index.js create mode 100644 node_modules/typed-rest-client/node_modules/qs/test/parse.js create mode 100644 node_modules/typed-rest-client/node_modules/qs/test/stringify.js create mode 100644 node_modules/typed-rest-client/node_modules/qs/test/utils.js create mode 100644 node_modules/typed-rest-client/opensource/Node-SMB/README.md create mode 100644 node_modules/typed-rest-client/opensource/Node-SMB/lib/common.js create mode 100644 node_modules/typed-rest-client/opensource/Node-SMB/lib/ntlm.js create mode 100644 node_modules/typed-rest-client/opensource/Node-SMB/lib/smbhash.js delete mode 100644 node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js delete mode 100644 node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt diff --git a/node_modules/@actions/core/LICENSE.md b/node_modules/@actions/core/LICENSE.md index e5a73f4..dbae2ed 100644 --- a/node_modules/@actions/core/LICENSE.md +++ b/node_modules/@actions/core/LICENSE.md @@ -1,3 +1,5 @@ +The MIT License (MIT) + Copyright 2019 GitHub Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/node_modules/@actions/core/README.md b/node_modules/@actions/core/README.md index 8d8c00f..95428cf 100644 --- a/node_modules/@actions/core/README.md +++ b/node_modules/@actions/core/README.md @@ -4,48 +4,55 @@ ## Usage -#### Inputs/Outputs +### Import the package -You can use this library to get inputs or set outputs: +```js +// javascript +const core = require('@actions/core'); +// typescript +import * as core from '@actions/core'; ``` -const core = require('@actions/core'); -const myInput = core.getInput('inputName', { required: true }); +#### Inputs/Outputs -// Do stuff +Action inputs can be read with `getInput`. Outputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled. + +```js +const myInput = core.getInput('inputName', { required: true }); core.setOutput('outputKey', 'outputVal'); ``` -#### Exporting variables/secrets +#### Exporting variables -You can also export variables and secrets for future steps. Variables get set in the environment automatically, while secrets must be scoped into the environment from a workflow using `{{ secret.FOO }}`. Secrets will also be masked from the logs: +Since each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks. +```js +core.exportVariable('envVar', 'Val'); ``` -const core = require('@actions/core'); -// Do stuff +#### Setting a secret -core.exportVariable('envVar', 'Val'); -core.exportSecret('secretVar', variableWithSecretValue); +Setting a secret registers the secret with the runner to ensure it is masked in logs. + +```js +core.setSecret('myPassword'); ``` #### PATH Manipulation -You can explicitly add items to the path for all remaining steps in a workflow: +To make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath`. The runner will prepend the path given to the jobs PATH. -``` -const core = require('@actions/core'); - -core.addPath('pathToTool'); +```js +core.addPath('/path/to/mytool'); ``` #### Exit codes -You should use this library to set the failing exit code for your action: +You should use this library to set the failing exit code for your action. If status is not set and the script runs to completion, that will lead to a success. -``` +```js const core = require('@actions/core'); try { @@ -56,13 +63,15 @@ catch (err) { core.setFailed(`Action failed with error ${err}`); } +Note that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned. + ``` #### Logging -Finally, this library provides some utilities for logging: +Finally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs). -``` +```js const core = require('@actions/core'); const myInput = core.getInput('input'); @@ -70,12 +79,69 @@ try { core.debug('Inside try block'); if (!myInput) { - core.warning('myInput wasnt set'); + core.warning('myInput was not set'); } + if (core.isDebug()) { + // curl -v https://github.com + } else { + // curl https://github.com + } + // Do stuff + core.info('Output to the actions build log') } catch (err) { - core.error('Error ${err}, action may still succeed though'); + core.error(`Error ${err}, action may still succeed though`); } ``` + +This library can also wrap chunks of output in foldable groups. + +```js +const core = require('@actions/core') + +// Manually wrap output +core.startGroup('Do some function') +doSomeFunction() +core.endGroup() + +// Wrap an asynchronous function call +const result = await core.group('Do something async', async () => { + const response = await doSomeHTTPRequest() + return response +}) +``` + +#### Action state + +You can use this library to save state and get state for sharing information between a given wrapper action: + +**action.yml** +```yaml +name: 'Wrapper action sample' +inputs: + name: + default: 'GitHub' +runs: + using: 'node12' + main: 'main.js' + post: 'cleanup.js' +``` + +In action's `main.js`: + +```js +const core = require('@actions/core'); + +core.saveState("pidToKill", 12345); +``` + +In action's `cleanup.js`: +```js +const core = require('@actions/core'); + +var pid = core.getState("pidToKill"); + +process.kill(pid); +``` diff --git a/node_modules/@actions/core/lib/command.d.ts b/node_modules/@actions/core/lib/command.d.ts index 9ad8647..89eff66 100644 --- a/node_modules/@actions/core/lib/command.d.ts +++ b/node_modules/@actions/core/lib/command.d.ts @@ -1,16 +1,16 @@ interface CommandProperties { - [key: string]: string; + [key: string]: any; } /** * Commands * * Command Format: - * ##[name key=value;key=value]message + * ::name key=value,key=value::message * * Examples: - * ##[warning]This is the user warning message - * ##[set-secret name=mypassword]definatelyNotAPassword! + * ::warning::This is the message + * ::set-env name=MY_VAR::some value */ -export declare function issueCommand(command: string, properties: CommandProperties, message: string): void; -export declare function issue(name: string, message: string): void; +export declare function issueCommand(command: string, properties: CommandProperties, message: any): void; +export declare function issue(name: string, message?: string): void; export {}; diff --git a/node_modules/@actions/core/lib/command.js b/node_modules/@actions/core/lib/command.js index 911698e..10bf3eb 100644 --- a/node_modules/@actions/core/lib/command.js +++ b/node_modules/@actions/core/lib/command.js @@ -1,26 +1,34 @@ "use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; Object.defineProperty(exports, "__esModule", { value: true }); -const os = require("os"); +const os = __importStar(require("os")); +const utils_1 = require("./utils"); /** * Commands * * Command Format: - * ##[name key=value;key=value]message + * ::name key=value,key=value::message * * Examples: - * ##[warning]This is the user warning message - * ##[set-secret name=mypassword]definatelyNotAPassword! + * ::warning::This is the message + * ::set-env name=MY_VAR::some value */ function issueCommand(command, properties, message) { const cmd = new Command(command, properties, message); process.stdout.write(cmd.toString() + os.EOL); } exports.issueCommand = issueCommand; -function issue(name, message) { +function issue(name, message = '') { issueCommand(name, {}, message); } exports.issue = issue; -const CMD_PREFIX = '##['; +const CMD_STRING = '::'; class Command { constructor(command, properties, message) { if (!command) { @@ -31,36 +39,41 @@ class Command { this.message = message; } toString() { - let cmdStr = CMD_PREFIX + this.command; + let cmdStr = CMD_STRING + this.command; if (this.properties && Object.keys(this.properties).length > 0) { cmdStr += ' '; + let first = true; for (const key in this.properties) { if (this.properties.hasOwnProperty(key)) { const val = this.properties[key]; if (val) { - // safely append the val - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - cmdStr += `${key}=${escape(`${val || ''}`)};`; + if (first) { + first = false; + } + else { + cmdStr += ','; + } + cmdStr += `${key}=${escapeProperty(val)}`; } } } } - cmdStr += ']'; - // safely append the message - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - const message = `${this.message || ''}`; - cmdStr += escapeData(message); + cmdStr += `${CMD_STRING}${escapeData(this.message)}`; return cmdStr; } } function escapeData(s) { - return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A'); + return utils_1.toCommandValue(s) + .replace(/%/g, '%25') + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A'); } -function escape(s) { - return s +function escapeProperty(s) { + return utils_1.toCommandValue(s) + .replace(/%/g, '%25') .replace(/\r/g, '%0D') .replace(/\n/g, '%0A') - .replace(/]/g, '%5D') - .replace(/;/g, '%3B'); + .replace(/:/g, '%3A') + .replace(/,/g, '%2C'); } //# sourceMappingURL=command.js.map \ No newline at end of file diff --git a/node_modules/@actions/core/lib/command.js.map b/node_modules/@actions/core/lib/command.js.map index 28ea330..a95b303 100644 --- a/node_modules/@actions/core/lib/command.js.map +++ b/node_modules/@actions/core/lib/command.js.map @@ -1 +1 @@ -{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;AAAA,yBAAwB;AAQxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,OAAe;IACjD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,KAAK,CAAA;AAExB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,8DAA8D;wBAC9D,6DAA6D;wBAC7D,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAA;qBAC9C;iBACF;aACF;SACF;QAED,MAAM,IAAI,GAAG,CAAA;QAEb,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;QACvC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAE7B,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC;SACL,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"} \ No newline at end of file +{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAwB;AACxB,mCAAsC;AAWtC;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAY;IAEZ,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAkB,EAAE;IACtD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,IAAI,KAAK,GAAG,IAAI,CAAA;YAChB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,IAAI,KAAK,EAAE;4BACT,KAAK,GAAG,KAAK,CAAA;yBACd;6BAAM;4BACL,MAAM,IAAI,GAAG,CAAA;yBACd;wBAED,MAAM,IAAI,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAA;qBAC1C;iBACF;aACF;SACF;QAED,MAAM,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;QACpD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,CAAM;IACxB,OAAO,sBAAc,CAAC,CAAC,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,CAAM;IAC5B,OAAO,sBAAc,CAAC,CAAC,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"} \ No newline at end of file diff --git a/node_modules/@actions/core/lib/core.d.ts b/node_modules/@actions/core/lib/core.d.ts index f8afe99..8bb5093 100644 --- a/node_modules/@actions/core/lib/core.d.ts +++ b/node_modules/@actions/core/lib/core.d.ts @@ -19,17 +19,16 @@ export declare enum ExitCode { Failure = 1 } /** - * sets env variable for this action and future actions in the job + * Sets env variable for this action and future actions in the job * @param name the name of the variable to set - * @param val the value of the variable + * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify */ -export declare function exportVariable(name: string, val: string): void; +export declare function exportVariable(name: string, val: any): void; /** - * exports the variable and registers a secret which will get masked from logs - * @param name the name of the variable to set - * @param val value of the secret + * Registers a secret which will get masked from logs + * @param secret value of the secret */ -export declare function exportSecret(name: string, val: string): void; +export declare function setSecret(secret: string): void; /** * Prepends inputPath to the PATH (for this action and future actions) * @param inputPath @@ -47,15 +46,25 @@ export declare function getInput(name: string, options?: InputOptions): string; * Sets the value of an output. * * @param name name of the output to set - * @param value value to store + * @param value value to store. Non-string values will be converted to a string via JSON.stringify + */ +export declare function setOutput(name: string, value: any): void; +/** + * Enables or disables the echoing of commands into stdout for the rest of the step. + * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. + * */ -export declare function setOutput(name: string, value: string): void; +export declare function setCommandEcho(enabled: boolean): void; /** * Sets the action status to failed. * When the action exits it will be with an exit code of 1 * @param message add error issue message */ -export declare function setFailed(message: string): void; +export declare function setFailed(message: string | Error): void; +/** + * Gets whether Actions Step Debug is on or not + */ +export declare function isDebug(): boolean; /** * Writes debug message to user log * @param message debug message @@ -63,11 +72,51 @@ export declare function setFailed(message: string): void; export declare function debug(message: string): void; /** * Adds an error issue - * @param message error issue message + * @param message error issue message. Errors will be converted to string via toString() */ -export declare function error(message: string): void; +export declare function error(message: string | Error): void; /** * Adds an warning issue - * @param message warning issue message + * @param message warning issue message. Errors will be converted to string via toString() + */ +export declare function warning(message: string | Error): void; +/** + * Writes info to log with console.log. + * @param message info message + */ +export declare function info(message: string): void; +/** + * Begin an output group. + * + * Output until the next `groupEnd` will be foldable in this group + * + * @param name The name of the output group + */ +export declare function startGroup(name: string): void; +/** + * End an output group. + */ +export declare function endGroup(): void; +/** + * Wrap an asynchronous function call in a group. + * + * Returns the same type as the function itself. + * + * @param name The name of the group + * @param fn The function to wrap in the group + */ +export declare function group(name: string, fn: () => Promise): Promise; +/** + * Saves state for current action, the state can only be retrieved by this action's post job execution. + * + * @param name name of the state to store + * @param value value to store. Non-string values will be converted to a string via JSON.stringify + */ +export declare function saveState(name: string, value: any): void; +/** + * Gets the value of an state set by this action's main execution. + * + * @param name name of the state to get + * @returns string */ -export declare function warning(message: string): void; +export declare function getState(name: string): string; diff --git a/node_modules/@actions/core/lib/core.js b/node_modules/@actions/core/lib/core.js index c6397ba..8b33110 100644 --- a/node_modules/@actions/core/lib/core.js +++ b/node_modules/@actions/core/lib/core.js @@ -1,7 +1,26 @@ "use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; Object.defineProperty(exports, "__esModule", { value: true }); const command_1 = require("./command"); -const path = require("path"); +const file_command_1 = require("./file-command"); +const utils_1 = require("./utils"); +const os = __importStar(require("os")); +const path = __importStar(require("path")); /** * The code to exit an action */ @@ -20,31 +39,45 @@ var ExitCode; // Variables //----------------------------------------------------------------------- /** - * sets env variable for this action and future actions in the job + * Sets env variable for this action and future actions in the job * @param name the name of the variable to set - * @param val the value of the variable + * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any function exportVariable(name, val) { - process.env[name] = val; - command_1.issueCommand('set-env', { name }, val); + const convertedVal = utils_1.toCommandValue(val); + process.env[name] = convertedVal; + const filePath = process.env['GITHUB_ENV'] || ''; + if (filePath) { + const delimiter = '_GitHubActionsFileCommandDelimeter_'; + const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`; + file_command_1.issueCommand('ENV', commandValue); + } + else { + command_1.issueCommand('set-env', { name }, convertedVal); + } } exports.exportVariable = exportVariable; /** - * exports the variable and registers a secret which will get masked from logs - * @param name the name of the variable to set - * @param val value of the secret + * Registers a secret which will get masked from logs + * @param secret value of the secret */ -function exportSecret(name, val) { - exportVariable(name, val); - command_1.issueCommand('set-secret', {}, val); +function setSecret(secret) { + command_1.issueCommand('add-mask', {}, secret); } -exports.exportSecret = exportSecret; +exports.setSecret = setSecret; /** * Prepends inputPath to the PATH (for this action and future actions) * @param inputPath */ function addPath(inputPath) { - command_1.issueCommand('add-path', {}, inputPath); + const filePath = process.env['GITHUB_PATH'] || ''; + if (filePath) { + file_command_1.issueCommand('PATH', inputPath); + } + else { + command_1.issueCommand('add-path', {}, inputPath); + } process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; } exports.addPath = addPath; @@ -56,7 +89,7 @@ exports.addPath = addPath; * @returns string */ function getInput(name, options) { - const val = process.env[`INPUT_${name.replace(' ', '_').toUpperCase()}`] || ''; + const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; if (options && options.required && !val) { throw new Error(`Input required and not supplied: ${name}`); } @@ -67,12 +100,22 @@ exports.getInput = getInput; * Sets the value of an output. * * @param name name of the output to set - * @param value value to store + * @param value value to store. Non-string values will be converted to a string via JSON.stringify */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any function setOutput(name, value) { command_1.issueCommand('set-output', { name }, value); } exports.setOutput = setOutput; +/** + * Enables or disables the echoing of commands into stdout for the rest of the step. + * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. + * + */ +function setCommandEcho(enabled) { + command_1.issue('echo', enabled ? 'on' : 'off'); +} +exports.setCommandEcho = setCommandEcho; //----------------------------------------------------------------------- // Results //----------------------------------------------------------------------- @@ -89,6 +132,13 @@ exports.setFailed = setFailed; //----------------------------------------------------------------------- // Logging Commands //----------------------------------------------------------------------- +/** + * Gets whether Actions Step Debug is on or not + */ +function isDebug() { + return process.env['RUNNER_DEBUG'] === '1'; +} +exports.isDebug = isDebug; /** * Writes debug message to user log * @param message debug message @@ -99,18 +149,90 @@ function debug(message) { exports.debug = debug; /** * Adds an error issue - * @param message error issue message + * @param message error issue message. Errors will be converted to string via toString() */ function error(message) { - command_1.issue('error', message); + command_1.issue('error', message instanceof Error ? message.toString() : message); } exports.error = error; /** * Adds an warning issue - * @param message warning issue message + * @param message warning issue message. Errors will be converted to string via toString() */ function warning(message) { - command_1.issue('warning', message); + command_1.issue('warning', message instanceof Error ? message.toString() : message); } exports.warning = warning; +/** + * Writes info to log with console.log. + * @param message info message + */ +function info(message) { + process.stdout.write(message + os.EOL); +} +exports.info = info; +/** + * Begin an output group. + * + * Output until the next `groupEnd` will be foldable in this group + * + * @param name The name of the output group + */ +function startGroup(name) { + command_1.issue('group', name); +} +exports.startGroup = startGroup; +/** + * End an output group. + */ +function endGroup() { + command_1.issue('endgroup'); +} +exports.endGroup = endGroup; +/** + * Wrap an asynchronous function call in a group. + * + * Returns the same type as the function itself. + * + * @param name The name of the group + * @param fn The function to wrap in the group + */ +function group(name, fn) { + return __awaiter(this, void 0, void 0, function* () { + startGroup(name); + let result; + try { + result = yield fn(); + } + finally { + endGroup(); + } + return result; + }); +} +exports.group = group; +//----------------------------------------------------------------------- +// Wrapper action state +//----------------------------------------------------------------------- +/** + * Saves state for current action, the state can only be retrieved by this action's post job execution. + * + * @param name name of the state to store + * @param value value to store. Non-string values will be converted to a string via JSON.stringify + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function saveState(name, value) { + command_1.issueCommand('save-state', { name }, value); +} +exports.saveState = saveState; +/** + * Gets the value of an state set by this action's main execution. + * + * @param name name of the state to get + * @returns string + */ +function getState(name) { + return process.env[`STATE_${name}`] || ''; +} +exports.getState = getState; //# sourceMappingURL=core.js.map \ No newline at end of file diff --git a/node_modules/@actions/core/lib/core.js.map b/node_modules/@actions/core/lib/core.js.map index 7e3c84f..7e7cbcc 100644 --- a/node_modules/@actions/core/lib/core.js.map +++ b/node_modules/@actions/core/lib/core.js.map @@ -1 +1 @@ -{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;AAAA,uCAA6C;AAE7C,6BAA4B;AAU5B;;GAEG;AACH,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;AACb,CAAC,EAVW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAUnB;AAED,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAW;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACvB,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC;AAHD,wCAGC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,IAAY,EAAE,GAAW;IACpD,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACzB,sBAAY,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;AACrC,CAAC;AAHD,oCAGC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACpE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAA;IACnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAHD,8BAGC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,eAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe;IACrC,eAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAFD,0BAEC"} \ No newline at end of file +{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@actions/core/lib/file-command.d.ts b/node_modules/@actions/core/lib/file-command.d.ts new file mode 100644 index 0000000..ed408eb --- /dev/null +++ b/node_modules/@actions/core/lib/file-command.d.ts @@ -0,0 +1 @@ +export declare function issueCommand(command: string, message: any): void; diff --git a/node_modules/@actions/core/lib/file-command.js b/node_modules/@actions/core/lib/file-command.js new file mode 100644 index 0000000..10783c0 --- /dev/null +++ b/node_modules/@actions/core/lib/file-command.js @@ -0,0 +1,29 @@ +"use strict"; +// For internal use, subject to change. +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// We use any as a valid input type +/* eslint-disable @typescript-eslint/no-explicit-any */ +const fs = __importStar(require("fs")); +const os = __importStar(require("os")); +const utils_1 = require("./utils"); +function issueCommand(command, message) { + const filePath = process.env[`GITHUB_${command}`]; + if (!filePath) { + throw new Error(`Unable to find environment variable for file command ${command}`); + } + if (!fs.existsSync(filePath)) { + throw new Error(`Missing file at path: ${filePath}`); + } + fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, { + encoding: 'utf8' + }); +} +exports.issueCommand = issueCommand; +//# sourceMappingURL=file-command.js.map \ No newline at end of file diff --git a/node_modules/@actions/core/lib/file-command.js.map b/node_modules/@actions/core/lib/file-command.js.map new file mode 100644 index 0000000..45fd8c4 --- /dev/null +++ b/node_modules/@actions/core/lib/file-command.js.map @@ -0,0 +1 @@ +{"version":3,"file":"file-command.js","sourceRoot":"","sources":["../src/file-command.ts"],"names":[],"mappings":";AAAA,uCAAuC;;;;;;;;;AAEvC,mCAAmC;AACnC,uDAAuD;AAEvD,uCAAwB;AACxB,uCAAwB;AACxB,mCAAsC;AAEtC,SAAgB,YAAY,CAAC,OAAe,EAAE,OAAY;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAA;IACjD,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CACb,wDAAwD,OAAO,EAAE,CAClE,CAAA;KACF;IACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAA;KACrD;IAED,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,sBAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;QACjE,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAA;AACJ,CAAC;AAdD,oCAcC"} \ No newline at end of file diff --git a/node_modules/@actions/core/lib/utils.d.ts b/node_modules/@actions/core/lib/utils.d.ts new file mode 100644 index 0000000..b39c9be --- /dev/null +++ b/node_modules/@actions/core/lib/utils.d.ts @@ -0,0 +1,5 @@ +/** + * Sanitizes an input into a string so it can be passed into issueCommand safely + * @param input input to sanitize into a string + */ +export declare function toCommandValue(input: any): string; diff --git a/node_modules/@actions/core/lib/utils.js b/node_modules/@actions/core/lib/utils.js new file mode 100644 index 0000000..97cea33 --- /dev/null +++ b/node_modules/@actions/core/lib/utils.js @@ -0,0 +1,19 @@ +"use strict"; +// We use any as a valid input type +/* eslint-disable @typescript-eslint/no-explicit-any */ +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Sanitizes an input into a string so it can be passed into issueCommand safely + * @param input input to sanitize into a string + */ +function toCommandValue(input) { + if (input === null || input === undefined) { + return ''; + } + else if (typeof input === 'string' || input instanceof String) { + return input; + } + return JSON.stringify(input); +} +exports.toCommandValue = toCommandValue; +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/node_modules/@actions/core/lib/utils.js.map b/node_modules/@actions/core/lib/utils.js.map new file mode 100644 index 0000000..ce43f03 --- /dev/null +++ b/node_modules/@actions/core/lib/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA,mCAAmC;AACnC,uDAAuD;;AAEvD;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAAU;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QACzC,OAAO,EAAE,CAAA;KACV;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,EAAE;QAC/D,OAAO,KAAe,CAAA;KACvB;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAPD,wCAOC"} \ No newline at end of file diff --git a/node_modules/@actions/core/package.json b/node_modules/@actions/core/package.json index 34f47ea..ffcced4 100644 --- a/node_modules/@actions/core/package.json +++ b/node_modules/@actions/core/package.json @@ -1,64 +1,41 @@ { - "_from": "@actions/core@^1.0.0", - "_id": "@actions/core@1.0.0", - "_inBundle": false, - "_integrity": "sha512-aMIlkx96XH4E/2YZtEOeyrYQfhlas9jIRkfGPqMwXD095Rdkzo4lB6ZmbxPQSzD+e1M+Xsm98ZhuSMYGv/AlqA==", - "_location": "/@actions/core", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "@actions/core@^1.0.0", - "name": "@actions/core", - "escapedName": "@actions%2fcore", - "scope": "@actions", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/", - "/@actions/tool-cache" - ], - "_resolved": "https://registry.npmjs.org/@actions/core/-/core-1.0.0.tgz", - "_shasum": "4a090a2e958cc300b9ea802331034d5faf42d239", - "_spec": "@actions/core@^1.0.0", - "_where": "C:\\Users\\damccorm\\Documents\\setup-go", - "bugs": { - "url": "https://github.com/actions/toolkit/issues" - }, - "bundleDependencies": false, - "deprecated": false, + "name": "@actions/core", + "version": "1.2.6", "description": "Actions core lib", - "devDependencies": { - "@types/node": "^12.0.2" - }, + "keywords": [ + "github", + "actions", + "core" + ], + "homepage": "https://github.com/actions/toolkit/tree/main/packages/core", + "license": "MIT", + "main": "lib/core.js", + "types": "lib/core.d.ts", "directories": { "lib": "lib", "test": "__tests__" }, "files": [ - "lib" - ], - "gitHead": "a40bce7c8d382aa3dbadaa327acbc696e9390e55", - "homepage": "https://github.com/actions/toolkit/tree/master/packages/core", - "keywords": [ - "core", - "actions" + "lib", + "!.DS_Store" ], - "license": "MIT", - "main": "lib/core.js", - "name": "@actions/core", "publishConfig": { "access": "public" }, "repository": { "type": "git", - "url": "git+https://github.com/actions/toolkit.git" + "url": "git+https://github.com/actions/toolkit.git", + "directory": "packages/core" }, "scripts": { + "audit-moderate": "npm install && npm audit --json --audit-level=moderate > audit.json", "test": "echo \"Error: run tests from root\" && exit 1", "tsc": "tsc" }, - "version": "1.0.0" + "bugs": { + "url": "https://github.com/actions/toolkit/issues" + }, + "devDependencies": { + "@types/node": "^12.0.2" + } } diff --git a/node_modules/@actions/http-client/LICENSE b/node_modules/@actions/http-client/LICENSE new file mode 100644 index 0000000..5823a51 --- /dev/null +++ b/node_modules/@actions/http-client/LICENSE @@ -0,0 +1,21 @@ +Actions Http Client for Node.js + +Copyright (c) GitHub, Inc. + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/@actions/http-client/README.md b/node_modules/@actions/http-client/README.md new file mode 100644 index 0000000..be61eb3 --- /dev/null +++ b/node_modules/@actions/http-client/README.md @@ -0,0 +1,79 @@ + +

+ +

+ +# Actions Http-Client + +[![Http Status](https://github.com/actions/http-client/workflows/http-tests/badge.svg)](https://github.com/actions/http-client/actions) + +A lightweight HTTP client optimized for use with actions, TypeScript with generics and async await. + +## Features + + - HTTP client with TypeScript generics and async/await/Promises + - Typings included so no need to acquire separately (great for intellisense and no versioning drift) + - [Proxy support](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners#using-a-proxy-server-with-self-hosted-runners) just works with actions and the runner + - Targets ES2019 (runner runs actions with node 12+). Only supported on node 12+. + - Basic, Bearer and PAT Support out of the box. Extensible handlers for others. + - Redirects supported + +Features and releases [here](./RELEASES.md) + +## Install + +``` +npm install @actions/http-client --save +``` + +## Samples + +See the [HTTP](./__tests__) tests for detailed examples. + +## Errors + +### HTTP + +The HTTP client does not throw unless truly exceptional. + +* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body. +* Redirects (3xx) will be followed by default. + +See [HTTP tests](./__tests__) for detailed examples. + +## Debugging + +To enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible: + +``` +export NODE_DEBUG=http +``` + +## Node support + +The http-client is built using the latest LTS version of Node 12. It may work on previous node LTS versions but it's tested and officially supported on Node12+. + +## Support and Versioning + +We follow semver and will hold compatibility between major versions and increment the minor version with new features and capabilities (while holding compat). + +## Contributing + +We welcome PRs. Please create an issue and if applicable, a design before proceeding with code. + +once: + +```bash +$ npm install +``` + +To build: + +```bash +$ npm run build +``` + +To run all tests: +```bash +$ npm test +``` diff --git a/node_modules/@actions/http-client/RELEASES.md b/node_modules/@actions/http-client/RELEASES.md new file mode 100644 index 0000000..245477d --- /dev/null +++ b/node_modules/@actions/http-client/RELEASES.md @@ -0,0 +1,22 @@ +## Releases + +## 1.0.9 +Throw HttpClientError instead of a generic Error from the \Json() helper methods when the server responds with a non-successful status code. + +## 1.0.8 +Fixed security issue where a redirect (e.g. 302) to another domain would pass headers. The fix was to strip the authorization header if the hostname was different. More [details in PR #27](https://github.com/actions/http-client/pull/27) + +## 1.0.7 +Update NPM dependencies and add 429 to the list of HttpCodes + +## 1.0.6 +Automatically sends Content-Type and Accept application/json headers for \Json() helper methods if not set in the client or parameters. + +## 1.0.5 +Adds \Json() helper methods for json over http scenarios. + +## 1.0.4 +Started to add \Json() helper methods. Do not use this release for that. Use >= 1.0.5 since there was an issue with types. + +## 1.0.1 to 1.0.3 +Adds proxy support. diff --git a/node_modules/@actions/http-client/actions.png b/node_modules/@actions/http-client/actions.png new file mode 100644 index 0000000000000000000000000000000000000000..1857ef375592b5bbce3f2b225865d32428c13acb GIT binary patch literal 33889 zcmdSAWpo|Qt{`fRDQ0Hon3-{RMHd;v*6ILy$;QPLW6i;9yF`M$b-X%*4t`#KA?+ z#Lmjd!v2MbnURT$fsvDeiG_}liJOs~n~j6$UyTGv&B4TsTUk{6U$lUCd?eqTob0$6 z7+hUl>0Mdq0S@L2Ok7+*9Lx;N%yd8qI!AX~Cqp+nTSwA=V-PiUGqpm$->BgQ>Nt zjj64ZBM_G9Kd^S+08RkMZ-D;|>i=~APXvIXm6Q7qjsJEmHa7nu;pimh0%YS~0{L&D z9aY`!Oc|6-9Rbb`#-?H}z+sa9;l_?z#KF|i3E-d#09gNfq7?r>^ zQFH*9Sy%%*9F--6iKN6t*qON4+3A?+nf?w}PL5m3*3rq(*4R`^l#c``9(oH46K)PB zE@o3k7Bf0CP9sJ-RxV=>I!;bjLpoLyBMwt8BMv53HXxzDbH*(SFn0c<1pj{D&H2-K1x1@z5a9-X2WjrdT_W!!FwjlbeFx-a5e++?-#Q2W}n3|CM z>#@cEwFLe_>-x1p?x8CM7DQ>Xvbu>DsQVHXoAhy>gqn z>gjO-V?maH7Jj?#i42M?D)#mzCxD8^MN~)-DP~>fTP~Eaq_D@u-aXHQd^VTk z*#p~?@D6P5-#$zn4QM@GVC$S}5kA}ow(HF`j3C7vn>+O_4d)TbAk)uwf) z8;`w+c_-s`{uq~fjZSKU_(txjUVgLF*r5@ox2}yds~nRvKJyBai8*h+XH2)_>wTS z>l>Cf1-`Q0bUD!G6Sg1=Z<@HccOuqJ)EsrAraGJyemSn=tSgGU-n(ge*Qke?Lon^l z?f1>*6$Tmu5zz`T$xn#I@~f& z)pq!{S}#k>bKTr=N^hC(h);+CEkfc1iXaJ9q0Y#`1A*|Yu1<@p)7(Dd(r7v8b&;db zu$R>JYHJ~4F>}(7bbZ6G1k|A{pfV+U6N2{EUV5Od|Hk>Y#Q${^^64;TR=x9xurQK0 zu3rbGQIv=kNf|UT0AxS>S27VABpwn9p!2)Xnam!MLiW|{D#oal$#a2e-HeZ2dS;se z@`zkYY480XjfMtl^s;#@3L3g9KCgToH`{B56`>S-+msKMuhddBK6q)MI=vtm0uj|~ zNAa+{UxOgkS5+93PuEQTir%EnoqMmh7l8pBU*%fYcygXFQ#fzF)-sOev%*Hr5*l|Qyo3@&8%9t6QQm@_JH{{3oCP_Azu?;k zcAQh%v=Hv zhbCMA5+8oN%C?IdyQ5s%+dW`Cg(lNylrZhV(L{L8{y2;9Oay4)}%s;!3-7zJ-?i zQ6<)XIp58`w70Ia`zp(?I|{RNLM+eit)nk{^19n_n8oUlJVgpOa+^w42j^q?oGB-z4tGyF#M9r(w8^bq_8lF^DllFIQre4Y@tMkw? zkBWO$ZtWG}i&|sX`!(tYK+Z&&3MxZHdHzVPXu6I+DsyBzC{8nLs!R}rg6$oheC0i~ z+h4t)aHA)*nY^!fD6cc$6r*|^y;z4F8Xpbxr`qHCfE+`Q)t}kSBsPg~+orc$jo2Jl5r%Z*sut1@U940uk?wYH?73~ksYH4FLwAS)n)a7$OSL1yPaQje?MRSE`^?ZbodVPvxus+MXIGbB!(vwU6~tN z4V*196SUlB`3oiWMnY4|1dq}4vRT8|4M7n1uoCXE**BlNHrFN_+Db$LthFSf>|Y;? zCJEBiN^0n8YOx>W+h^M|sKC{1#`ueu@7B4iq`$R+#1WJP;&OY`>KwiQN(Tj1Hxscj z&u0OlC)2)i$1YlZuT=I6u16Gn*3OnR!w{i#R~|KkXOuTTalu8^3Q;&6ntO>e1NjS5 zabyBs9HY#zBCKz)*Q60%D7jQ6x!fyB07-n6=En>S@1;@n+~e$LWwA_DB0R;NOKs!6 z4e`v^AMk`3Eg$VBDmZk97qKS~*>O^2SdAN;MFgygqP$n`gi#S={DJ>SxQ2x!L3vw> zlCk=Qm^O3gJ*OgnuwKR}a$9hP7TXR=4thakK^euwzR9rUkEv-b5TKk*z+4!uNfjn~A>jGPV-|pP6~@Twd|@oAm9M3i zlOEL3LR;+}Kd=i@c2baZ&_<%09w|Ze@iF)8O1Iqhm{$nIkSrt$DFfjdA^Qj#tEyY~ zeJJ8bMI5ZljqVD&O>SN@((oc~(zbj}uQq--%R5 zCSCI&DnD~)zpdu);cmQ4hvk0^dI*})1*Hxwugk78Qa9_Qq+4(rR1rRBPW;m8BfPcP z^y6SO{m!&Cy5ZT(&_bL3gE-Mc^!J#4c*rgr{OFk)+#kV;h&Gm zPJiZ_*~qoqVqA@fHfzaZCC{p?;u`%DzgYyOy(s|U-NeT0&O&-uttsk@ODYApq*?vz zo9803%|-XljrV%!?sna;P1szSXySZ)5R+~DXL+2-CZ&xoh zAr!d4g9N1p4i5!#6pVF_Og&Jj=<&I^6w7mb9A;gcOf_uv8=1$-7_xf~4N0%YITI?7 z+#E8k`8MlFb!Jg*zgU?_xRjP*xRUr|LHl0xi9mVVq|Nd?u%K2&yE#y)+ct}0A4#HF zOP2-S9?x$V7?5r(B*X*cI> zWx7wV#oezuAEkM*{#062W)j@(0GpZ*+-&dwcfo~2Zl?fOqXUPaGPcplk5%_t^n{nd zVD9X&fLJ}45sCDDQ$j?%J47_E1oH((d2et^Y!Ms45Vsr3>KiIO(irvlgSVz@_y@x* z5n6SzW9Pgo%0f{ zmI`V@=<~ai$7&J~S}clWX<^>;@SKRTP~Zw(IK*jh$wso=vv4#^Q90EMHGDU)k|jt2 zpFebS`bhrJwchlVNn48AqauE(MasJ6N#k3oa6utNP@X`f<#}2vNe=~=M5Q8_<$}OM zIHqMV2`FSF^e`{gT|NW)RV!+{_&d&g{S&_kg=;x%K2?D3WPyz*>K%(2^IJPySaTzq z@Q^6pMz{XhM^jX>Iv}n%q%XKc`6keK#{8(#ks@@l^SMA}rRJAfT5WLndS@_yhcq&I zq2$8@~RomQQ88|x3}+mCY#^3a01Ev)*k&`@|pJ8LR0uVS5rWJLN)M{AZu>ez}^oKWBmSIh9ZQ`%sT7P`Ok&-}oB zI;p=B^k-Af&| z2_i`$a3KQRmmK_67ESvdjp@-78czdXT?RJQlq!fR8Dh4Ny+!^MzH*CN$}lt>Gezo4Mfdvkn5{KaV?h=O|Mp9I zFYTv2=W@`_=yW(%J1CwQa^z-Ar zn#uvPkWlJ`537bveayM1JX)#PGKPMwKU%|Gl)ne*Sg#J4BL4M-s(4PwmQowY^4fD} zkNinF&&1if9L?@KmeBAJc#_sV?Cq-Hc`1rFQk+S_>RNIJ6U1q7D*1cZNIoa~lPp90 ztF5{F51AJueduyI--5lRVZuM{vEfw8IY<|?KXt6Q*gFdF+=!5`$3EPjMc^Qij*=FL z!Ehl9PEaECA@*>14X#Z77%-08G!Z;}Pb*`gzo;%XTIP@Er0G`w+P&IEzR^OkMfcPm zJq*<9{y$os|9s6Ob5=1+xk~W^e{asut4-uB*kDcHcMF~8HAr$R_E;+MaCAqX;Km+p#6dKhwkaG`>fVpwrX~d(?$7~pV*;cw4$Y}3mF#Se_taq zXO(pTcPQj|L&Sh(H?)X$N?`Wm&yFhM&w?KUBP0>#VC@o?KGnliUpihlaH5tS;slGh zbcN?pLm;%_>n@-iP$cOj7c&Mk-V#_m7NOTD=K=ajIn*Uh9PV@zmg(Z2gBaGFGWHgvJDY-%0&E~|VVtr*k!jq9 z?y6`CJu$Y$cnx1iy6*1I5JQ*itg)Y(5QK{}L^%^E=B>AHlD?*aK671+6YN#s&1yG( zXvEz=UhJlqUS!cEqI|A4SDha(z0*g`M2PwI!_0F80#7E728E|2eN^2c#V@(H!J2?| z9``a~AxE6wmsqyAE|P%9FRmtAl(|nJ(*T&e0IO%f9Cv*(5UCsL7NtVNII%9itlmLG zyH>%O6=+Y~;dBGXG1DH>w|02s6j&*G!gGe5AZo5B1 z2Pq@65Y`n2lQgrruGFc~W;bNB>9z%+N%n^}ifwa7#Y=E69C(bG)h8sm9qDKYQ`}H9 z{{ZI9Hi2Qh%rC>QJ6~&MczARD;vLZ_6JzBm!0Q+lsHJvN_PZK!^;D$TT~XBfRB5zx z#hV(gsIx z2Tg=PAvv{>!jaFN&pOCwj88Rr8c;B{n6`Y~y{BRkas^}HJ;+znb|SB+HT{wlVl}$4 zeQs-G^#g6!R)}#L@Z5Nf%u{h-+@Z>79e+K4IIN1Jz@YK@*^(3QN_=`fl#eq_*QSXJ z9QV^;bAc|I>Ir8Xysn+l99j5v81NP$33bE?LF2(v^6_rsXp4@GnXK?nY=f<5ufnoo z973oxz7fMN*`=@DYOvAiBlo4D?W8V65MA@bC^IQ%aqK?PN^8ZFrqK+JJB|k8=(*=D znWA`oZm*h`tprV*->^mn0y4)x(>d?X+i3BGb^%3aR$5BaeBLEgPM(|}JRw6Y0{`eB z*|Jm-c4)(!K)Rq^>PmEq=K1XaQwBO{s^%JnN4E!IcAGL6YwBmBeV_E@OFLQok#{3) z0?=y&{|yuNL=2+YtVEhk#C;hEr>0Fik+9PEA@6=3SXyGfhevi1fHW4S&Xt-Yb)BN{ zuZbGxy5``2uJPXdI-|o4V};#n9kHl>tU(zU2#^$?&yfI^Fh8i%VxnO~|K7EtMOa!( zZ&&g9iBdBhITAS{VVd`dgn91k$QP7!6u>exW!1B*8!>*3HooO#7pt1*mFb5PCB+b! z3>fzJOq9n2GBqm$AtKk4!WK&Fc?qJ%;MPasnWISB0DAgt6ks;N<8!@fVj}Vt`ec|U zk4Hh1PGmc*^>UT0ZZkc|mN2NYqmJLGOC~>BK%YY1%M1VJO|7LBYWnj$>UAL#?U1a` z2jAQNnH4AFwu+M1z-zi*k?;f_RicT<>e&0#{pgxNZ1Ed2X<>Lk;5OpTsFjR`?=i~d zcVWnj!9rHuw?{?52Wia;TpyKw%#$qh`?gFu+*sg;HbPpS#V)roS!?U1hKADK;&5o$ zh!rlj`#ozwHE&P@{uKYy4o$(2$|p&yEu)fSVEW49@6wLN=?2XP@7+v?wY!m^DOIW8 zKrqai(g-Cx3+5XUc|>khv@Nl4CuDF%@bn{;_+_4yIh(NtBvn?b5dh)ohOR9`bBgPI ze}}(iuQ4i~Ael2I>M8+Y9>@sWs;-UiYd#gbRh`J7d(~srJV9zufm#L|no_F5{uS1= z6d@>YbDAvoEgIUoE_A%cm5X2t^tOM-ra7y2YUJG$hF@9?-8d9}dlQ_&d?Ie(i@Q1e z^VLuu4Xj1SXSA1W*ewJ+4G5rRqW|@y?AA+?RkSiI^)|6MryQmd6p=ygl)tM#4o9G} zcqiQG&niKOgr!W~=B;WH@qf_Vhs8qxKGF*KOntAHg(%(M-fWfXwzRhg;8k6;ImnQ} zkn<*vJ>EjXClPJWtO(4TLr!Y=3WJ4NW{9U}{H<+GytH5}H3w>Kq(8^E%5-tOGr+w> zImL;shJw^%OW!l-@Eq4Rx^&J8QDyT|Qlmlgq(dHkEpo)Fyx3w}X?gxVJHo+b&E&mw zl0H=!V)K)L5;M8uPx_xvTtb4N)|C1#wDU<Y(@RL4IBsb1^-j$$C-CaoyDS7-&)bxDG9z?juL3R6*fu zUkV^Q4X56BH_XkG+Wpn_A4c9Kh-*}+Z)cPn?9ffk<<0vC%xkX@U1t^&#YRdrxkd!E z5P&t1r_XESL={n8D1D+OLGy^`TQL%vK z5qx0$%ixgvX;9qSNHxm|bQ-f6MduOaiL^7=W-B}!Sk4K0nRYy4nkmkbzrMYh4qC6Y{muPK8fhoD)SNSJ!z9!l*KaO5KpBmCTY1%HGKJemUB+Yu0A2~j z{p=^C-p_+ZLP$YKNE*z#gvSXmeR&Eq7g9oc;=K>Kn#pWEdnf`#f>$CgY$jv$t@blaj)>X6+g2hyqWi6_ ziryNNl~fb0xd+3*5r48MExeTc05~fDY*vgE|0Y<=Ye9hs+IKu^o#Jg{V6$_^%snbQ zUE^4$0wSFA4dJ^rY@JbY2vuuTmUWTS-c6Ts|CV{aB|l!co=49~d3F-#b5*v@n#%**);wSf zCb-tQ1|I#DjqJmPhXq03Q@k3S;dSptW_Pi7PgsR@c)weU^C>NMw8Qwty7hkT;;od4 z=~feL<(#XyjAZJRGxb|o=S~r$#i3#nq}mEJ5`DEO3%ke(?Pq?f;iT35*vUCPD>p6^ z4dbB9P)Pt5q3-L8lTFyVdFGGS6XC!eL6YxWPFS_^3Io_ISYL*V;H)x%lk ze60aN?dc3YHdX?EUvltN^IWAHH<JwGY?=EKa6+x0<=1dnX0p17ZI;OA&?hHXrHHBog&b0Or zD}+8WV+yuIT^;qCa!z(_#6Me3^Z$moqUmX_@6ic)RqU zRPL|%7vHLbjx%RRv=I-sEtsR^vZ+zAQ)ZW5&vg!$!p_Y)!x1G)+(owvkECjU{K_4IOMvJynI7e(A?|Jt6;c-I+sPeJWYG-l2>1-as zJM673w!2=OtuD;N4`9IAeSx#kQdL(qLckqAY_-Iz4mW%AOf&-)!95Uw8M7JV5}%Dp zo$hFylKxSrspo@P{Ro zb9Pb|NP)nT)4&Gr3hzVv1-^GMXMv8SSFKRP=k|hit)P`Dzb(K0k{oJ6rcNtZO_#{- z1lmpm_m#|OTI$bgYo;tv4lpAzrLQfM+D{Fsp+$of+PLW!8%oMbt> zLaj=`BpH7+E^@0^6dKxKxW(rZ`PW+V+CpMf>uMih7Jf>}KW3RV_rp*Na zR_FcRx(TMX1z{coprCbMvW%V!`ofid>kP0y($uxq4Qie#wcOk(&ipB=3=>5xGg=$n zng|-=Ek=H(hTUb;#^t+50u6e>NK|(C3@9bTRW!1zXLj2QWnUit?axhGs_^b`+aZp3 zlcH!sNfmy7r&Her#*u*mQ^MXK!0MJc#GyXkM9xiZwGYSB`o=|Er|=B9;^BK0Iy0YK z+ieY7y7(72Qu|Fg+6MnUeoAl?MQ@?G986??UDi*2+RDKblpKb3byA~X2&-hd5Bg&U zZQBSxD;!gO5*QPEBQ2QRC04$YllA0Y=U!sbkFyObeF@DO%ArBanMSB#p7lenB1;}` zH3Uk{7aOUt#(>+RytJQ!=+6oa`QYiB?(vj?*bk4;hnt))Q6&sj(gKB5~#o1+3^(y_s zUdWAy;pEzX$p7Wb@Bto4G4;cfM}#Bl#HJf~$?}&gFCM}KS;Lzp3szQJ@llUv*)-s| zh=HE#6ju^=>&o~5UR>6`N?!A+axAMEu)xL;F4V(@m?NYm86z_$8PBwREO`-YAQO>z z)4+Xk`kOroCf^AiOYYY4+bqZ$NHMFQwifc7@SDe88Wswc>&mx!cD`ATuctj$It5e6 z32NnSV!0&)M^n(Z=jrX8zXr{H60$NW0Z-6PmBfUlMLVY~-}ILv4`-$dM5VP(?P4WB z@mQjyF~DnFYni2C8)eW_2b*R}#J9MV&q==*3KLcGhL;hk;#yEJy$0{NxNsrD*Sre0 zL(*YFtwlHJMTd>~68_8V{t}1Uu?(mdzxO*_GC)V$Fn%VrdV&bv7cUrG*C^! zci2^UiUHQxB_f9kIwuth5NthWoANfV*tH@dqo4YtnmYXQc&RsHxtzi5;?u2bTJ0CR zpl;ePqrl=FP8p0hxN$T={8>rbZ_a2?mv9j6T#>oa0@6sdsG6C0DO=Gy<;7KxVwpX)@%oR?y3FhoiAVdQ`Xat zTfIvvx<=5Jxw)?p>`AD6>*I&8(4qKGS*0x9Pgf6ucOcwU`uG#YJGq(K#C8B%t zKvvkpl%WABA31BU`)o&plV{7*lraqDy|PwcvBG3O8Lm>f3o6-F;1Qs(9=zo?b9g8u zCMIXMZ)+^%Y7Yp7q$aQm>=LO$8lpWI!)CMxHZS@Vb4&GHuhv)gtib7e8LNzuir~_i zKV8Go8R`rZpriP2nM`LuFihyPH@qFv{@Undb#}YGh`fU5Qay8<5LyCr@}C05&Bzd) z?%~{(P3l7US!tkMXQ=xWkGlUZhIZ*vYoT&;t!;O9@jZ8LFd)b?*K(e)u`Rz|G&#!f6WNs&9lPmFp4J`5= zcI7fc{hf^Q(}>!UtFc=EidQqjos2j&&T zlE2CDi2Lk8Jv868&U|o&Y~T{rAPGI zY+wslqAw`y3h0ZjIZ3Vo@6|bcGk2E0)%K5{py(xSXYi<;cXj2zDL$Y%i6&Fy1{n(@ z!ow{^kF#|lf*=7H1v#UUGKw-}yO~=a_Jb?qE9#VQY38^+)Lii4rC*|*t0Sp;vaTdC z=JMJ7E+2g)c6}zHt!DO;*XE`u+agb&h;9DTPbnI%EbUZ{sip>JmE`HBJI^Z04)>jG z7v&MBY}f`aqiv99GfDN#&#q89HzZ@Jkn?e}Xqd303AV()H=9_%FOT|-LLY@1*UOS( zVsY4c?ZO^qDeu}idUas$=1(@+8%IoV-M^twP&~IT*~@$$%GaC2VQBmVszBWQ==^iycY^92kUEE4mmMyw3Zg#hAvx?k^6q2t3GU`U6w}tL^)Wa zv-L(x?5k3u<`rwW-LNM(r_5q58S1bXLG*HPQn>LQe2hFtMy{%^orDJ+=sY;Tw|PVn ze(2XgI=BFmgn)YCeKPe=ta3T0b$C?dkL`Y!J8pye){9Z;E9f=?bcc8JWBoI3G9-_z zHql^QfB198Eq5mIsGGFNK(^*yjkOd99F&Y%wP(HFAtLnOHZuaE$*?z4`+k z8g`?Lt2WibiSnlio| z8Y*wQWJl)>FsXg6cR5V56E?)X$j1i-sP^Y12OGQ2!QzjR&&`Z4L{>FQ@L`0aO%cLn z4ac}pWQ->Zk$W9X(s~AnQkHZ^69DKbrb)pDz?qG!5`W;TuRf7+Mv(-}^H;Y2f@YIU zoQIKDHWGz!NUl&r7qUd|Q*Tgfr)?yi)c#ls{^hlEm(1llgSE1=9Q{)g%wVc7zUvv^ z>Yz)Zrs0+}{n1-L=~t@6>&i#|N3BH2!UyStn+JYq*&zMwcyMk_{a3E9L4xzcaWWM( zi`DBPWu=nTq6Gl#&bnH+%QU6$=X7MOXEjRPIsG}_=m)=Oe->OUoh{;P95oEGWLdhT zmH@NFzky-?UKfJc^e{|t1%A%$8B}UTg_+1y{cE2oUoa?F@m($P{g}W*rT2G)N`ap{ z(Z#t2e54#4H}6Rkn(xoTEmYwONt@6$V>E}ejo;VN-P_S)PEa17?}|z{MjD#0R`hdk+3;6Rp6PLyhEmHhG()rT_9V zwsY~2y;hWkhE=mcePmM?y@k4DM*Lj@EDh8wAxF(~w{I?*OI3sCAjsc(X>4cxti zJU1M{PmwLd3r~h4(Wcyuv31U|gmT;#IkTZhR+1N(K@@cF8U9?;a*=9m$YNWu=-zIS&l`I*!GvXCUoSNTX&p1uzM;| zyheBXcNO||1dRa%fqkHHH1gMO5e%f#n^KXppO@J^8d)Gomt% z4UPRzjahUR;G^ddC{VZ3F`Z3`9mTF$KHbZaH%kg@NRrjQzLC<&3S+3ZRza@>mc80O zc&xb5Z_k-IPg86v3??Rb{ZWKwv(u4NOBSP;IZI#N&;YvuZ5Q*s`Ia)&VQZlPAwg#% zND~!{-YujpJGW*XDR)S5_9%|S!n?*5o_q#}1j^n?0BA81I*q>6lj_s!R5f$qg->}D z`f8TD36}M_L0&Y$&>$}Q6{XGWvW7gHSph8_QdrG!Olr9p91ERX@S0m9e0zK%>Xq!4>Eml&Rpz_)7u52Ug0j;?U#i*7 z{LYP&^p=6&P0zc-WzDhgYX`=&wOHVkvR|L)zRyMDO^7saNVT*l;D?hz91T*4XL^5G zzv#R~x6$7PW9A_oq^~GmDcw&{kkX&N81{cS6r`y%-pNM|(+OzL&*#JurXf4+jlaQS zWh;`h$!zPzUH39NEQ$EFaUFCQnp4et%CR)reC@`qL^y^wU_wC)mQ`!SV}?6#t2(*cSl`U{Vr@dFYT>z$`F*r2 zck2WTQdkh#_dLghl9E1;Y})BuMs6Nw(KU9jkyV7jCS0ZfL-zE$@AG`+)(;jVba<=94LZ%^kxQSFH!y)oEw;aT6Bn9}P*1s2*-zxqNvXk+{-|KAsIybh zX?ji_*Plo~1#!Arp*lGeAv~c(?VM_6L||dFS5zx;H24D+wb(%mecaCH`=t`ibv>@# z)_hJI&G(UFwA4TU4BDR~dCulUVh5OY%|;tfj})tnJQYY$CsNcOz2(1~ z1IK^!xN(tyTGe(e4UyW%PD<{+Z{D32uQ{AYMH&Zr8+sEA-^nTm=(bQ}mIy1Mp=9d0 zk(kQz-eWa^pbkbGK7TL1c}7LtI-AF|&{|sl+{p~Tk-}gw%ajb;Hx{*v#{+Lfb`_#e z8?}6Wrg6YMUvZf@t2;4%zPc;r+R)dZz`vc!trL#;WRrI6d3l zAF%G(8?anCLHYYq-bX(By`z2YCsX(*mjD#=amYo4-`oe=LV*%(1R}}5@c$HTBEz3o zqJNtg&OXwPj?nAMSrCP(!QF3D%nf2S))N*D7RPnDBGjvbPcYiu>UH)+VEtrY30YiP zFXMhx?2XI}EvrKU*z6{$Hrd)1aw5t1_QjNkoo7Yv0t!92k1^x01~EwmT1BpVxVpD zEAzku?#Ub+@4wMLC7H&KXk4ycWC>T7DRW+iT{3ya9o63@Vt;041vvJ0DXuyZ0e9Ozv$RM zfO&liuq|@D!8tx28##&N7mlHUaeQc{=!}bDb?R(ofq;F{Pg6z&^Xhf*35jr<1va)be@+VMsgHyuR>*r zhYIXX!Ml32OR7H5Bg2eAByK|ixdQK8#>sR!rL53?h|rICI5xhD{?BwHUmcV6vBxH! zm>j!)VoXr#oX%WrAS%4=Z%icRH41@7`vs|ZXzz?QzX=aHU6;~-QpoH{F8YWe^9#Di zlP&$SM@2a#hu9v;>BhaEG_W-KF7X_qvYt6l4bhK^z~;P9Dv@aI_I2|0?laEs=x-;? zO+F_&b9nYNR&U0fM#Ds(iIPT$As*X5`70tR=|h22AhDD!OnFD zdgck;%uxJP>RQ@)&#K;e1)IL1Gad#$m{Xx2o|<$>js&&>mFa!^CUfG8+Zqe%QL>Sy z+r`2#kJ)i!b`tS`DR1DttDpZ~!V>wME3vGH#%x$0Gix zi+bpn)dcb`PxO@46k43=PAaD(qYk^R+1pGZ1PQV=4D-5F(IOK2j~8wo^#Y&kV}m`l zD0wNlGYvv&p54T1Td%$EF1a|8s|6jegSev#EpLpDEaX&vV4#re-fP^W(Dy%;a811; znPvtG&Ht&k+Fv$wFxyJX)aEt{uc3igcOKXjfW(3VT09bvo*wK`7NHRzzKLgf@z<}q zz;5!{!S-lm7o7#lx1NSu=;KrQ=)o}zTQ}vOO$+dIm**oFx2G}nIkA6UCzSJz3_I_m zx-u^PDg~t`Z4JBcBqsPB@m!Zu!OdYOhO*s5=#)k8b0zN^Eh3EL)~*fWMiV*n6Oy!f zRG&b}&BZd7M6MzgsX2O`s!SB0yZ9`AH2;QGH>db1M|eTw%hNtSqhI_>w=q|G(~o=2 z4~S3B5kx3+NMTKM3IM&EgRL;CB8V5^)Cq$bRMYqF#4bb z3}mY%Kd}JW${Yyh*LtBFPl5*H3P;8GCfJr>moW)xIM> zDn$eW%rl)v@8(zhcJ@!Mf9s0hR@>dHBhx9wh*j0^+A3r- z_;O`xd0V-~9Ke9rg<}sWItJ6Q^P~HC!K*aUIFAw15vE69=n^)>BV~P?Xw>1xY_?^j zHh5x9T*kH@h2t&rFN3{COJYVxQx)q0bpjrV?* z@uOR=qR%UDn)!MBi$NWa$sXIn#^k|0=#}x|Z7F7Yi$=cXQj~^@_oMI15teheJ1}*Y zH5$;lBfETChI(~08l_7x1{Zr)&9}hji?J6gZCOkx*sFo~i$RR#GpiaM*=H#vVWAS5 z@YDiUt63!sv)YT8whF}EVEyc+=@Ajgy7EBO#?5YSx?R>L_Qtw14&R*J%Qy)URC;dO z4P{O!H7Fj)oApTioF)!)&dj~+Egj(Z5C(sXQ6fqYQRcEjv~%+bZEG-1~{9 zbgXS>Rno=*7`=16r4u0jInkX^lijPEN6fVI^FJ7vW~i2b+C-&&SMhNQ=hzarAxjyCODN`LxTCUwKt(yWIA1C+%_d+!#` zc#eVPT#y84#@q}3oWE<9dOQ8O8uG(*$tNG1q)s!c_vC7vS>`7DH(zB7*Ncwe zX6Id;jLwbc1wLoB@vGCvmz3#;Sl(deG87-=FH!9cKmodSfa1XkgA+47q;6=*;X0Op zipyn>_JBh%0<0RS7xDDMlw1@aYN^Y*Q7kVi=y3S+n*$=oy8fR2864$uydQ1RFAo%5 z(;R}nTb?eS8VOW{X2YxKN^HPbUu>Fq$x!EiRcu3TU0lr}`s@MX1Yr_B8L0=RLD+V1 z%E>j1y@aZOzo<-u(9?d+Ll(uAk(Bu4=%7&kpf1nm74Z~9D>aIfEJI|$ZO#+>`X#mhG4+2Lnuih>Q+ zbJb04uyn~mAOmO({KISL`7ccs^`s;2h}R`?XrobOtZ1kPqd8^mH&L;UzFs4BNfWyg zKg{-K_S%_FxTqFfO0j;&Dh^1X8YSvQ-^HU?KU}8ZLw%%_Idx&?MOG|6g%0(N+DwA# z;U=Ius|{F!MMKDx6Ffbj^LAD;JN1t(zjZC*!5M7VQ;DwEkRIROhAgyI@lP16Jh!ON zVEVlk=?8y7JP3ocEH7}_P+1U}Qua~d+56d~x&X1{Q; zi~6_Uj!0WbBsQhY)fmETFxp5J6eE_-yCO}3)2oGf!7feOCw`M-L%xHxs)!#rF!&1W z)QMkH@Tc{Mp>PjIzBg+iuI`R(KI|T&pn&*EBz{lJgksl4?G_f_2+!h;P}nt2JMb`q->AkMpIj^KG;)G z!TlWSl>br&TfffA%Gj#@TaSHUx^H~TcH2<Db7`gcYd{7r8^Cs;_OT98(uRsoC!?66d~da zD#P4*7L)?TMoLa38dAA~$+mM!M3ANMs8m^pXD&>pw^z8ZrlxHcva{)o=kEL5MzgZV zLQ+9(6lzlfxutBp8Q|AQdjITkeb1LWn5!0#bIPk0v*7RY7$GgJz8;`JPeha^vlxCg zmB@?p)L(WP;xmrsQ3{T>+j~;S(ol=3M*Rm849yt@ioTt5nP**$OKqmL*`26ZANf*3W59;f9_|C*ATw^+QS(Plru<9Y(1% zTrl$i^9Ci>X=ChYcPysy_@cl&8HI^B1d(wWQ>OCHT2S8TK5{LvF@_xaBkw_~Z?e-_ zY=YLT!lb2ECJ=6~58acDGncn>JWmBmuF~t4uk!P^erfR|K6~c)D87*6+_&$F-%!z| zRI1;D-yAGl!bX#`^NUlx~|#Swr$(CjgD<6 zJ5D<6*zDN0(Q(JNZQDG#`?;?7H=O->eVJ>|nzP0jRkhCjLBEe{V)}vCMdyL2E8|kk zKV)sgeE?m{(_YIfb`ov7UG7jWB6-M#f`0fPmuYWMdJgNIChJ5@KK|{N4a_?Pvb- z1|K5>3Ow@p`H1C6$L$It3tDbx2G^wV5rI-}Jw5T+%V~;;oNjg;H6U&0yiKxxZfm>l z1{R7%35BWDJdjsgl-@qP zLqbAxFy}e1@F=tsll|lhx`ZsQjV1LE-8yKJ#4c+m|g@ zW!j&lf=L{mxyKhV1|O>^t+|(9_|i-h!ca==4y}etSk8}>BULL9`V*P#(wje%M636z zGrXAJ>fV(95?Wi3fk}nqJBZDU9eZ3pa>~TK*r}9yDXsnr&4MFaYfMXC801$kP%Q9T z{*jO_zHl1a0x9xB%7MUtrEbySSDHw#06!K;rENBS)5ka|)BP9!$^rZd?YR-G;@j#5e2b{Kxto z&;9CuKU~E`{!;srJ`4+nQ*t>G52L?Wo|%l@njcqHQ5DavOsQ^ixq;Vx%!ZQZ2_^%# zk-)geIVBm=b<1!4=rq9IWWgcy0x3fmP#As3t;TswO>;gF)h$wy;v3;%@(?_WsW$LC zNT}9Ls0S{XMt4+E200LZ)%(=b->TepaOmH=L$0Qytojz2c226aU=+J6!zi0`KtE<; z9_|knaa~_y(;2kJ9S&ls#n#>7*}~?XB;f%N+%zGzrF{aFOKKErjH6CzGeb9^!$ZJX0=@dSWVpsB%-5hV4 zv7l6&NE!mak`-7!=I_#OuQzOg8+X;}cYXyAY{ScPYita-lv*O`WN2&oS#G)Re7t_1 zF}6pJS%m#}cSxA!2>i!fQ~KskG2Nmz61WBA1mF)$yhtYngWv088BJ&Xj)@Ss_le|K z6*v5MY%jDQ?wcv@(*3QmHmGA?G>&2Le=d{>ew=ke&W|2yA@YeXQqdKbNrY{FPS(^s z(OVUou9~^oq^i6fBy_|7xPMmEtkQ{Q_wwtIiJ5%FfQso8^c6fsB#=JSx!Qf1n}`ww z@M!uRzbn?|LfBCcutY{|(O{l$1t&Ha$xY_$vXYCAU`Qbn^^v%<{# z-r7PP)N^<=?Pn=6P*_dy(V$)LWAa%onMd%)^RYN%#6vm5#o&ZUI!zEIHjj+Wg3fzY zO&Of!A6=d0v<;OglJMJ_@}DZ?gs?Q-b&RF=(kcy;OmpJ$s(9nKKGC)O3@E01$JfCl&62| z5rA(8y})X<0kC8C{LPHDaTbCkJ_fOzH}l#Kh$7yo;9*nf_STm_E$Ayf&l9!|2!3Yo z>`6Gk4_MqRMmiYf8FAFeQsGy5prPxr&)hK|c74LIaG-pIjUm%^gSgeXicJneodWO$ zvTzNqw>Da{l+h0iF)I$Jcz#f~;}EuAUN+Gl`QEQb5y|A@jUz}Pr1jrJ7f4ySNUcdE zBd|1_1hoX!h4Qe(N6PYn+XR#PKjcb0cDt%?+;Pn4iKm7y$V8zpVr{>@Xm*@upGLnRm6O%vT_2C?E zlt+DQNLn~Y!i!Sn^6Ryt#lnW;s%Y~Lf2ViZm>Y~QLIy_i2ZvzR`n1X?-7I&X5Y0-4 zunvzEEF2lChGiBjq24{E+v`Q+27vE#aU!V*zwi|N1dXT1f_E7Hd;$`6>eJ+nMS%tu zom~Y;BQMcMdSW)`sG{@i*!z`XP;C1Br*Va5;*U?@-c@}#?B&>)qipgVR$-_@JCkMV zK|QW#bC=uk22|K?)yQGpm9c@%BL6_=rXe27Y&kgeZ&c3H-4Bod^tjc;P08X|PLoKArztsdd zoptqF++c&zef0wKqN4*vq5p22-%gvJ-^XPv>%1Rc446UJHoe+t1v7wAnn*=sG|4G3 zufwP1q6mzBL9Xzj2{-jg;1 zKZ1}z`VHD*_G`0gIOw(Ds|iegI51r%oWWK^$gpR5wCZo@)?`rTHYQPIv_E*R`)$jB- zef16w1*1tVE-}6Yw&@?d54D3$P43V;R!E+1i}vVoW1`}<2dgtnSuG@q9Lu&VIn7`7 zkz@LQ|Lg0U>{M!bo9Wh|7gaR3*nvH*|A$cQ(vDr2+wwp&QE4Wjt((1Cl6XWrDk(N~ z7GZmBZM{XW5tE9sPvv||UOMmyL@|u!YP)BN(F9e#p=;65ep}k5m^hS7zKAIy&`K^Y z^PMq+RZph9{-WZ}j$g1XQx_j5Y)vt8b+Qt5_EwW%eqkx3BC_4)KkuH%?jvHuBt_KA zT5hq(;mH!HRYuU7?XG@sg4H4e2IowTYc|jE`F_g$Oy(Qe!{j}!qJg36iWt?kS(#(( z8q7kM{s@W7UdwKjH|>gppec$Nf*@bgqg4=}Xx=6rsW-<-nb?6mTYT)CPn8VIKSF|e zj0B+JJnqe;805U&A?o{JS2fxniP#@))-8VLJK_ARL?9HiJ2VI3%cvItNz^Z5bz21I z_N8A~!C-3@)7rLFwDcKbd;wKHjSj{niGNkKV!sv$`Qui&oP(^ex*Zp`pqXl!nrF<$~phHiMhn09CeRvAhb8(B#&a+CgB6p8*xH z;ec_@J4jpWJ<`AGzHV{x`_d%e{h<)Uf4oFVDzq<5V@R7@Jm;fJZbM8Kb4pB*_`Li) z*A-e&{WFQshQsnSMoYn`H&826=?eS8)nY=4m%ib0v?L|Wf7!ALIkCBX-tTEcMeYhH zDP8%~3NykMH@H*$&ez?%D7XWRb)V@H>!5N5)Ptc*XRH?u%m-KvYOYtP|oTl014Ez1ut zYJ5`EAGA01aHbBqaQrDinhv7Q{%AOjqNJ@%N7pr0edh^v@2(NUt;j#=pOnV9D(54h ztNRH4Z%(*0FY?kOQsANE*p8f;wlM2xyCZtH2 zPijt6q7jAAkq$(nkk>XqNkR?HBZFW87e3n2rihRzhhnl)g_mlN7S1Fi1b!Sj4x z-+)F)uk|K+QSiMs;D2kghJah9-3w`A%RcN8WS{q=t49hL=mJpnE}0j!G#Q7I60(!1 z(8-&NA{<}oef~KPQHL$?wRm56M0}_;XW4`%37xT#Pa3dkFs~R@ZH0yi(tau}?J<|A`R5EI8tZy@~)U^E6)!!2p>Uawv_OIfE;ia~FLe zJ6|C+s-1>8tV= ztXNnAzY!{ggFd$($jXb2K&lD*Jl@uS1)EmN9lOwCspS&EGff zDO=9NA3ASq^XDzr1xx?QD>tWk#A*!rod1{FU=K@RnBSt)Q-g?%lKQL!c(y4_ti_tH zI9>Kx1@FB#?$75nP~0x}H8$ji*Fw!|+u>YrG(AnH!Z-~I^Ly-NjLHXxpx(rG`X z$YHP~`@t`zWB-V)X_7RJeu#4$u5eCbb8#9Cyl#m?OpqX;UjwePBVf0Tq@|NOUhAcg zj@e(U=`OY5^l5LvO&Rk#c?oxx!_4iiPwWHHpk;JWzQA+Lczn^BtpIO`MG0U~XFS#2 zV0pGX+web}c%2;lSM)@nRGge)1-xd3yejUHuA`DbrWjB%-#OCQf3Ygm)=C{pF{!~+ zB~q=D!~7x6$FOxxFlLE1D*!7OiZ(0}Qibz+!u>t*GFC5KV>qS)gii^ta!i#@XvHm6 zRoiccF_f%fgfLrJ3x_!iJ9JYg6>f4UxDf9BAkwEe8^Qohu7adkq(q;=0Hzlc6cDgm zQP>0F6=;mkRf z|7`&Im&i5PbMy9%9#QLvg&7nh@)xVdSOIsqCd6HRhC6W%FCO}f!gXaEGIxTDyUMpQMY-e=paTv z;zCh~3WfBc=9P#$szB=PpfTuwL=By7>@mwy&j7M+PhocP?R=ccitBwpFixGB>e+{$`;W>ZASmI4@b- z7Q#lb0Tu947Y|!loOLi`L}#fBR<*`SYR| zCcCdEp~$1zzW3$@_*#;r(x5i(f>vWY%ZG`^P^uO`LzAE*)@th&qg-kDs8{n$c$i{* z9wG{7SVsEpal&Js$CfrW?*v>n5I$QUa=UCLY2RyU(vjJAPnWH3^F6AfGJJ{&XSK=n8RKqEMF`5sN5};7+eIinno1cO zu6l+NcSqshWM4xowOgUV5F#k?frut$b*)}A$pvL)c-f&4uD>=W7I{&84oM-{thp%< zq7cTN-2M(3(jWmUo1n(uxH~ubw{;8mZaP_Oql~<7ZyS(Atk6n$b38HPCrCtz9r5ti z1~H*>y*s&L8ph^Jg|L84p8%#a7RSFaA{2>$=+_{)xb$>->guZKv^gTo{Kp4s6RFwI zfX|~Uz=jKXMh;=J*i;6_SJbT#RUQQGw0yJ_5T8Zh2jQX+))x83=8T zIMsm6W)3Wfq)eenff-7YSO-}7SOqF|vDhmd4F1bQhRv*7=_D@P$%%(%SG^h=P7%7i z^zpSg$W?N1qh&`Mx)u&~W219}xZbDizxJrdSsvumXsbkZat!lFQBB8^!kbvHlEWDR zo+#vzDg~nq(R-h)ziKJ&qoR+G3Ki5?e}!2*3k9DqWz3oGtgG|>unwXOgM5^OFR)-x zOs?}iGS^137TV)tov@P;_|T> zv7PKy9;8b^FGWrp9QVrVp$YhEK2vxZ00SjRYM!ZsWd}irvj~kp6bb z4~eBY{RJnu%qjWV|FfTq5T4#WY3($Dc?m2Wpz*f3`@NOxv!m(MZ>Fxbq8Wh+SU~~F z)x^H4Wo{2X{60wj>R^k`Ct}evb%w4djUhxm!+LSCsrYGXuERLap(IM2i3Wx0ydfjH z^Na>OivcyDitL+alGIaZl3(#WLo0mq1l>D7)jSJ z@9rTHom7p}et!0ihg*YKCHRC$!mVRG08(ECX(YVG0?hL5n|H<9<;O?~LB(Ou305M7 z2}L4dxAIM--jp~r1f1W}iu+b$snt3vt*O05&Y{3ho`OAJ_FYVm#dSo{O#Y^Yz9$AbBgO%6aByc?28N*s_FxvjRb$M z7z{tei{HhR*XVA*HQrK*4eU{F+YXkA-Ewzxm`LR_Y|iN$rd^t6>1>eUX8A1f&?& zAg?f|^6BD~;xYUYngNQ=vI}e1p*it~uV22Erj96RT(RR;f)^5kl0sp&F5bwdA@mVr zqhc%zI^I+gHPT8_lUUA#(-U}oCUw|o#^%F@0uXL7Jcz4<2Lrdk?Xzyf2b!Y=ckud2 z%1lQdT|JyW1AOItVw!S4w^h3d5FqV=1@3ltzK5OQ|KJ?`rdOvqxKQ}ZLCD#rOH9jQ z2)nw}ABYtu5BM(vu0ux=mmM`_XvA|ImJAvkrMPqrR82^+aaY@6&gB%-ZDW60+w(_= zz>QwlV8d4O+7IEXaR(D`~ikn-C0^lcRF@)YvgTP+Y<=?`L)wM=gz z%Kha6QUh~y0Oz{{Y%Wdf`y)JM-4Yi3#tFHC>QS!0pZQ4*(6sz}NhSyew~y2zoZ%3r zrurfUlPo~4dYaB-Au#!jZ-IQO(su2AmsfLK*JZJ##`0yA(J%S)fz*%D`+P_9xwDIZ=7a%-PtJQjANj^RW^lpZn$ma(zBcHDhsUaDw`{5~r=$V)iaJX+ zO5p1SLQP)piJuM1h*hrc_ma2n*5T!!b&`Vd8^tG?h2Nv2)wN^gHMN-6L94s;v&A%H zG5`6N%OBmYcyco(;#cD!J8nuRuhW5|y}XWwzvY=db5@q?oK59~6oY*Lsd~EA>swXC;AVpNw=@17$d-r5p+co_Uwb>sdDS8wxvdWw>Q~l8YiGWv? zRUbFE7djg^(@NLy9k6XOJvM6jTyRygBCeJX7nkeDG=e<$1a<+2=`m^!pMYB@Nm$ZnlG>6owirK}ic9RkVZ zHCqnDQkR_jqyO#t3_ZcLYadl*#_~o~&O@Ol?lvUIa(@TMhVwPW;j+hqBjkxwYkgN* zV?ACS$GFB2SAzOZoJiFg?`jjo6QH?$h!!#{Q!uH3%)`JyU^ggb`h7|JzW1<06$nF` zDA4nl{{vB#(APozHpHFtt;^^KjRZ4~8oE;FbaO(^=e;-QI6j)vX51%>N?FueR^Nfk z(7!I9&uwQXrw328vdUt+Q{~-#aSPTVJxn+f(Og(lwtyfaycO4Ydds{sT#%F}_JJ93 zv+EDF z3v-Mmmmg!S&*kxxmoqjBbI=@iCaqJURaSqhP-TP$ii@i`;t0L^t`@5Ua{Wr6%w3dJ z5X{PwQw5m3A1@?h+aZ8|r$nInh;YI|i;(Z3orZ;|s|==Sc60mA3Xd(>GIloE@Inl* z>xhPWpj1r}OMcRDTrK=nwX3V{1@$)a6KTTxj^qBPaQJ}9b>pPSI98r~x1{}^HebURPEU2BC?k&Hp0)Zr?t|TdwVM!61 z1?ijmcpgDAtOZiR8l<_Lg!^mAnZ@6I$3`dfiI7j`bg0|d!sjoW!%WX5_zbj7_O1RJ zV9voHwJxPUn?cl9Pw?~pbu0>-Ew{F2gJ9xzT>I^;rphdM>W>T0{CJQt7ao^*8&~^q z8|_-!7W>JADzRG|dkcl*rtisQ^l5)o;nznpTEDIg6fTnmJL=V+hY5$~&il|a35Cok zJKm1F)yS{DO;#zjb_$Tw4E0^KMt*Ql4!BrzaRpEZ(3)~w~v%{xm zGjjvKi~{X2#I%JfOSG%$&-;%9MXje)Nu_xz)=QtYZk3zb`?5; z4Yw_;!>PqJJ(pDE3qdSYkC&MvCHCkKTsHlYmc)}`)G^Uy196$G+uA<=Ac)>driL7! zm~m*yM4Bog>9qZyu4a36EzyD>ZOK6xKd=GnMM`jd(4YDXsNPv`1*{iC4jp>0W0B-5 zJx+LN;zsw&$Vpf{Fid_gGTIt75||*o8TniLA2y4HZwA{xa;aJ5HZdm_f=>KYxDyny#HLU=mgfzOMF4HoEKVKKA>JMa<#URDgyA zQ^Dv6i?0tEJ<o|v*m)sQf zK()QT@{0hxe|v&iZKo@U8ecbf%|C8&9q3OMV&%^`R2HT)Dnb$WqgQG`#tR z_=8E^F-9lN=98`aUgI9=gH<|?{!t}y0F@?Z(H@lcq^hG$`UWB6s+&T zvXfRiO>_Bqr9|UoitnG7xQ&zWcuu#{9znpyIxW|uS?;U_?gk(P7pS-&FnNZu0eM2y zzb;WQGkqyS@ovb0LgrH~oQZ#S^f+d_;&&iskBm4dmn|W={3{@q5C#QE!f~^F7!DA3YId6VjJy^zZh- zLkTDZzXn}p@S5c>T9H>(P@&nbfPC7`JK8cmt6EYuJ;Qo^W>v})-UIS{BA99^e<`9sm!5qpjPr(bvp-;WgLKnaE)8(o7SU#$?lWVdrXd8p<&3Y z&K!J|i$8OtPkn?=LtcOn?>Z1enSsJ8m{1X=sGw`~szwbG4d6xdT7qPO*i zCwsm7W}mz&9LY;Gz9FaIEtb%ov>wmTR-_n^qr)`rk^(FQ{)W_xXfG zV_h4Va%7*!*L~A|Z8jCs?66}!0ii|Lnt%KY;qE1g!St)H#G5qJp7QjlNbzmYhW8&yb^+)G49(!BAXi(M#0d6pOo5xUJF=$D`6a=(eBa+vPxHe7(F>=w>^^DQIelokO ztIiyLRk5&Nhku={VG+%*gTc)Y$WUnY1e*IITLEm@JjGzvbS3z?^*n4u&UzT&cOMoAZK@Ent&t- z&Y{{pxK}9)j#+hbLqUrz(Vs$w7O{~n8Ch%Dj9IS@Sk*@daGxGiw%lfP2ZaS^s% zNT18&W(wC8XB{Dj2?5p?;ahwkY%1{eL^nhai;)65E(|GahE5;Vc~C%y)0smEeaK?@ z0sI2ns4#Oopy>^ZkM3K;)#~V1*OxBCrsSd_3s2Zuss>LEUDMyiIP~|e`;NG0SRrt| zfaH4~Y=FnZ{H||2d*WxGKBQEi>k*kDtpwLY7nXlGhlVDTiAK)LBMpfC4LTRZzEc^# z=JTqY1cy8Ef|)5^W9VO$_3`BGBH*Vv=P?Re+s^Nky92-ZhkHlP=AK%sn{xQ6`it8u zKe@WSj&w79j9(qYi~!MRx(qL3(%0(u<-=P7z2FP<6`gKGx?RzGp9 z=$645->%rs2#{+qHD_jYwP*@RoK!}O>FJ;EFV%0B8=Jx9zCK%GqKUS4QRG?adrR_J z96vqknOx+A&~2N<%_t;YxBT`NT%BGjzdL#dez?#g3qm#KAziNzg9(Tflczd2dMh($ zI&EMAdT7Ns?p#yuCm_U6rrwRhvBWM%*~hj5Cmsq5=!2fOh(s2DGoZa{h$?zMU?Np1P|&f=#|H*Q4osp$?Np5824UsjhKR7;eM?y$INl@6vdj81AUq`j zfF%P1|9^VyZ{Ha-L6DdPuv?dT{+9aPKE1_*a+KD&!F8yV z+n9k-2d0^H+sbh$vl!=^^7i42X&&%IGxc}Z-_*3YG7Q{VdE zBYbx{`e29n03!8HFB1*KSMPzwtL#qd%Z!~nAxV%)KB4uepu|aSZoe6AkR7Pht!G(~ zX8EOQf!MJ!$<73iF>baJ8dLS~E)wq{&6+OTk)0tz`TEAp7CI_*W7|!x#`dPV-?pk9 z(qkhK@(JoxT=W+mFY7L*_1HcSSNu+g(NA5ij>rZH*2L3IbN;@e!BuZ^Vln(r z!BaS{3Sq7qPVJzapQ8Mf#$h7OMKF^bVM`NOnSwRDRX(}EC5l*Ii%U>P%|}BIXFN?L z+kfh7QaA5VC&xfflOThsz@f|1V7r}X&UaoRtcHZBA z9KE08P$;JN*!csC0e#UvQoWHwAAr{>k#R-LHqA?7uC|y-r$tF7Lt{i`4R7H{>;l;&W~9<3iwk4zKc$#9iLhI&DA<7jwP# zK-?cwU{qO2j9DlJ6A?tR+8@d(2poWEukyMB3SXHbj8)4+Pe1E=Si5N9y_i2)17P&* zuS(|5zhegeeLu~BD|m0)!Dt6!8*NvpnKxYxy$}81 zSf6pU*)EKdKtb;Hu5n8ZWNiMy_IOna-tq6&<-y_C8}#NalSB?g)8RX1s2AxUw2Ma} zhGt*U_mq-!_E_=u#*pa9lw4`)Sruk=WWmigQ*nqKkg65Y-G>gt`;Z0E%E7V+T0#rJTVzunZ%-RjvJg^e{|ZKIsmy<$()2f z-)8t*^$>XMh^?amH@D_674`4%kyMv=`Rj~#K! zpT#wG-%hH)Z!|IhLE%|VTU!NFEdzJC-`Q2>bOItBz8L9MPrVhB2CVoy;Sy-aM<)DQ zyBX$Y7Q#@7SRI*~gceiC0*H_bnCQ#U(B~%$fx;c}uD#;T)Ol?osdoz6I}$KC?f1$o zBhq0fht9;9y(Th^>{ThKvW;(Jf&mZ|3gL7Sn=g%Rwj&y7IjKUPV(;?899a5nKZ|BmY1pKkPw zCn}Ql3!x~~ja@PXWCZr4BqVY6OnkNG9R9kqI*U-&&}c5`@uEmP_{}Kai!E^1uYQ)N zOFz%fbjM^%)W}(7P;WkvLHl3tWeV{dfx2$JPA~`4^Wu@iRcoWy5OWGInjLe6kJ*+& zM!u6^MPw|s@4*$ZIIGXA_-3F(@e?J}^|a772)&neRE^g4D$+nA?7s1(f2xXHhZM+v z680S(C~iID*yMOw5AA*UxxOlUVQY8&>I=*P;RYtx;T*?hx5A4Sr6@S1iBLK|Jtx7Y zH+=kO9)i#~FBS{>dcrKT!rYK|@WxuM=2P6FTl8c-`y>fGLUQMk=? zwLdVbn%G9u!wG>*p&N6^*uJC3VsRBY74%v8c6pP2w^^L1Nq`NeMJcZrvm8*iPKyeC zn9^dFGh}|(6rgb?fD7jB*|l~QHhyH+@58=Wss?h95C6GKnSQDbDuX-?FrOf{4O{6e$ApaMPlFqK{Q_>sgv9N;{VM(cts5%UZ{u zO0LeWvbb8|>@Avkxl9qfIlV~BG2`4*c3-?691*Pz)N~HbURaE8RE{9% zlH-tE^Z$8|kpbt0p(|USUYdlMF^hg86R={2=n;y4vk-GAQb>~}vMaN(9AI#k zm>ApjxEv|V(#F?b?bI)KhE`H%3;6RhuHPzn!bB7f;e^e z9wspzxy6wVB2Ud!d7=38h1Mc|xGkLJe?6vFwD6?V+TE-+zPIHwB^Ee`o>;gLM;>kb zhLf~4{vgGi?|e5A+I2P9X2$)H%1IGu#$^z+9N}+_+HHTN>gRvu8RQS{5vNJ{YaC0& zOIu(G`al`4Vf_3!)U}p?A288*9wQ|K1e6yYAMbiK47e9=W*txiL*AM(QN1n_BI0Pt zP8z5yu?i`xvz)+{CF{*EF1cK|3hvc;e+HL(0teWch1qG{K9alBWt-vVk+T0WEV}mG z{&=E(IOjah{+XJ^`cVuz6{QE58dKBI0P(R7$^o*K++|e@6v)~Xj@Ez@Z0P&KbUtqX z{JPliwoN|3hrGVJ>$+;|INF4zFH*9kY+Tn-69RTZ_{}gFfN5%N9A#>6I$7!@E7xI| zf?cu;&$;ni6%{`@7b*f2jLwKEU)OY98|FYIx9G{GyJM(+4#&}$xkM=J=rvwPlqc3`qu48Y%CD&3ebK-z5ZG-(0Y&beh>0R16ckKyV10NCUU z{AE($hP~sy9?T}4zZ+R`A#aUK$tr#Ifcch27yH#erbKT#Wg1&q8&SW|N7cM+GNR z&rS_!t%Q1Yz3SVMS3rx+3R7|t9Ijc1g(NnVVZ3dw{-i>y@gy@&np*NcOSA@J5qjl% zzbxl=$g8*|_su<=F#$zFZILAb7*Y@zHsWJ4Fj*KOsU^ zM1Y{+>nL%vU2jB^jE{Z_ffNH$U}Mej;IV&{BfcP->hZ1Bl`Dx47li^Qr-wR5>RckG zmnzzp5;ts>LxZDP>@X?WXnJ|>*^0%l3Pn*S3g5Jvvpp*s!89r8Ho5}km3hC`h<#7- zaudUZ2#T|nhX!S+fE+mSE!A;?yJ^u7n(J<3p-2wKj{fVu@jjG*Iwo1fu|rW3a89Dl zkc0vWv{Umbeul7KKiZeiQIX%APjsb9JSS8Ssc}k{gdUO-{0yiK}8fpmb=mMf%pQyMnPLE++7HSYLz%fGOyNj83geSr_lv+xv2x zlk3qtZp#EnP`A>oW?FAJL>-1?&jn2d9D7qNPCNpdo?E3B zJb+z>>m4UJ9#(i?LfHvOm}te*@~81y`B9P^x18zQ+XFkvJ&{g|JQfe2q+zN8Nu<|+ z3uz-u&wJ2x)#BnJr=`3}Z_MSi?bZp#5!>J1YI!9r9$D+fN2|_*&xfzccX)iLrRCjZ z#NOaqs{T*z_qcLr_4au>e}uBCqx|vjEFr*Z+LQxK-Cn-d-LtU(=^|%|p}pF5gb*Pr zhX=GhFRPA&dgj+45g89H2$MXVl`cfv4N-N++h)cR=KFn7C$3`&wklHbFnk5j4w%R< zoM7M&A=2{TlG0IS7hE_X>g1}r6#~%4ETL&yBKezWRcYB?ZjszlIxlzOi!<2J1vs&_ zQNLYAozr-k;#Z&0kh$>eW)2U~0D&CH`ec2HnDYMH1Dl)8*&-eDDer5TtLyNw7`7eA zG^p*#D&JF{?U{gF2BfpV7RX6y^1mU9?RmFGmN;=ErX{xCv;JW~0|f9Im#^yftnqok z(2z{Ucn^dfH|rB+?W$*KOssh$8eU%gbZ8(6h3Mg1fG2sPtz{9?)IwlPQ{o3JJ92Cy+QA zne_AZGQ69wN4ZN2oMq0S27@ZW zl`037`Ti26@6Yvzo=XgK-0%2@gqZIP*mT(uX`?s4b?u2bntO~qr%#7m znh+fvQKC+EB3DyNNtfIG=)y-5H4zH1DS^r_d{@OXeAsf6(B>N1Aplu4P(Czl`&Ouu zGV(h(xGzC(KFRN&U)ZA86-g?NJb2d_soRkgIc%CdXBL?41q}!`;hiFoUVShsKkd?# zvv4jR2uk!39ifO)z!G4FIZdKz4ZPhHY&LFJzzGaAK*`y#()~+n zK`tJ2p6;(cEf+KEPG~>W@vn+uk)#1SNH0KOaVH>Zd@ZPK;KM&2nOlK&AW$w)E= zl5`F3FGk{Bm>|RhUZ^6(mv&*ia|fKRy6YiPGzPhQXG6KSxubrg+?(RsL^2ap=qNG= zh9((!&p%M6obN)E6gUeoEeu9eu*^1&Vsl@>$6M83s% z9}ZRzA617#7b$|zv5dLo`Pt(hZlW`yzFNFo>`EAu!&6wY`-3&TBgl}u!?E0fa3w3% z1~|^yL#b49`s0xF26>9_%{rI$)7tFWbV8i9c%oF#x3!(Crc!&(tPCYxmIezbDZZ|+ zT*zT{Yq{0^vj6sicB%5!BkXd6smUBhqc8T8yoibItntJk|B4iXc*dP9uIh9a9Si7V zV*$&=6v6s{%j3Ci&4BgiU0}&>3bZHXV_1h8E}jg?AyGVCwb0R|=aqZEn`Gi&^NpZE z^f%;a1W7cn$Df_BdOuaArSe1(F+`u9M14g`Y4Be;{PvHV2Vis1Wm6fCDRs4LX@Mo> zdgp;{;>w;%qt1UCPr_et3Ve{!Y$yX7-ANF7WMm6jP$Ci)?)`)uVOf!pSFpeINJ&U^ zOps8J#vjK;J)UaRsqz5yQa$2bqkT3;+NC literal 0 HcmV?d00001 diff --git a/node_modules/@actions/http-client/auth.d.ts b/node_modules/@actions/http-client/auth.d.ts new file mode 100644 index 0000000..1094189 --- /dev/null +++ b/node_modules/@actions/http-client/auth.d.ts @@ -0,0 +1,23 @@ +import ifm = require('./interfaces'); +export declare class BasicCredentialHandler implements ifm.IRequestHandler { + username: string; + password: string; + constructor(username: string, password: string); + prepareRequest(options: any): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; +} +export declare class BearerCredentialHandler implements ifm.IRequestHandler { + token: string; + constructor(token: string); + prepareRequest(options: any): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; +} +export declare class PersonalAccessTokenCredentialHandler implements ifm.IRequestHandler { + token: string; + constructor(token: string); + prepareRequest(options: any): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; +} diff --git a/node_modules/@actions/http-client/auth.js b/node_modules/@actions/http-client/auth.js new file mode 100644 index 0000000..67a58aa --- /dev/null +++ b/node_modules/@actions/http-client/auth.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class BasicCredentialHandler { + constructor(username, password) { + this.username = username; + this.password = password; + } + prepareRequest(options) { + options.headers['Authorization'] = + 'Basic ' + + Buffer.from(this.username + ':' + this.password).toString('base64'); + } + // This handler cannot handle 401 + canHandleAuthentication(response) { + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return null; + } +} +exports.BasicCredentialHandler = BasicCredentialHandler; +class BearerCredentialHandler { + constructor(token) { + this.token = token; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + options.headers['Authorization'] = 'Bearer ' + this.token; + } + // This handler cannot handle 401 + canHandleAuthentication(response) { + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return null; + } +} +exports.BearerCredentialHandler = BearerCredentialHandler; +class PersonalAccessTokenCredentialHandler { + constructor(token) { + this.token = token; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + options.headers['Authorization'] = + 'Basic ' + Buffer.from('PAT:' + this.token).toString('base64'); + } + // This handler cannot handle 401 + canHandleAuthentication(response) { + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return null; + } +} +exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; diff --git a/node_modules/@actions/http-client/index.d.ts b/node_modules/@actions/http-client/index.d.ts new file mode 100644 index 0000000..9583dc7 --- /dev/null +++ b/node_modules/@actions/http-client/index.d.ts @@ -0,0 +1,124 @@ +/// +import http = require('http'); +import ifm = require('./interfaces'); +export declare enum HttpCodes { + OK = 200, + MultipleChoices = 300, + MovedPermanently = 301, + ResourceMoved = 302, + SeeOther = 303, + NotModified = 304, + UseProxy = 305, + SwitchProxy = 306, + TemporaryRedirect = 307, + PermanentRedirect = 308, + BadRequest = 400, + Unauthorized = 401, + PaymentRequired = 402, + Forbidden = 403, + NotFound = 404, + MethodNotAllowed = 405, + NotAcceptable = 406, + ProxyAuthenticationRequired = 407, + RequestTimeout = 408, + Conflict = 409, + Gone = 410, + TooManyRequests = 429, + InternalServerError = 500, + NotImplemented = 501, + BadGateway = 502, + ServiceUnavailable = 503, + GatewayTimeout = 504 +} +export declare enum Headers { + Accept = "accept", + ContentType = "content-type" +} +export declare enum MediaTypes { + ApplicationJson = "application/json" +} +/** + * Returns the proxy URL, depending upon the supplied url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ +export declare function getProxyUrl(serverUrl: string): string; +export declare class HttpClientError extends Error { + constructor(message: string, statusCode: number); + statusCode: number; + result?: any; +} +export declare class HttpClientResponse implements ifm.IHttpClientResponse { + constructor(message: http.IncomingMessage); + message: http.IncomingMessage; + readBody(): Promise; +} +export declare function isHttps(requestUrl: string): boolean; +export declare class HttpClient { + userAgent: string | undefined; + handlers: ifm.IRequestHandler[]; + requestOptions: ifm.IRequestOptions; + private _ignoreSslError; + private _socketTimeout; + private _allowRedirects; + private _allowRedirectDowngrade; + private _maxRedirects; + private _allowRetries; + private _maxRetries; + private _agent; + private _proxyAgent; + private _keepAlive; + private _disposed; + constructor(userAgent?: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions); + options(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; + get(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; + del(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; + post(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise; + patch(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise; + put(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise; + head(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; + sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: ifm.IHeaders): Promise; + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + getJson(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise>; + postJson(requestUrl: string, obj: any, additionalHeaders?: ifm.IHeaders): Promise>; + putJson(requestUrl: string, obj: any, additionalHeaders?: ifm.IHeaders): Promise>; + patchJson(requestUrl: string, obj: any, additionalHeaders?: ifm.IHeaders): Promise>; + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: ifm.IHeaders): Promise; + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose(): void; + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream): Promise; + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: ifm.IHttpClientResponse) => void): void; + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl: string): http.Agent; + private _prepareRequest; + private _mergeHeaders; + private _getExistingOrDefaultHeader; + private _getAgent; + private _performExponentialBackoff; + private static dateTimeDeserializer; + private _processResponse; +} diff --git a/node_modules/@actions/http-client/index.js b/node_modules/@actions/http-client/index.js new file mode 100644 index 0000000..5c54cf8 --- /dev/null +++ b/node_modules/@actions/http-client/index.js @@ -0,0 +1,535 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const http = require("http"); +const https = require("https"); +const pm = require("./proxy"); +let tunnel; +var HttpCodes; +(function (HttpCodes) { + HttpCodes[HttpCodes["OK"] = 200] = "OK"; + HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; + HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; + HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; + HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; + HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; + HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; + HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; + HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; + HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; + HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); +var Headers; +(function (Headers) { + Headers["Accept"] = "accept"; + Headers["ContentType"] = "content-type"; +})(Headers = exports.Headers || (exports.Headers = {})); +var MediaTypes; +(function (MediaTypes) { + MediaTypes["ApplicationJson"] = "application/json"; +})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); +/** + * Returns the proxy URL, depending upon the supplied url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ +function getProxyUrl(serverUrl) { + let proxyUrl = pm.getProxyUrl(new URL(serverUrl)); + return proxyUrl ? proxyUrl.href : ''; +} +exports.getProxyUrl = getProxyUrl; +const HttpRedirectCodes = [ + HttpCodes.MovedPermanently, + HttpCodes.ResourceMoved, + HttpCodes.SeeOther, + HttpCodes.TemporaryRedirect, + HttpCodes.PermanentRedirect +]; +const HttpResponseRetryCodes = [ + HttpCodes.BadGateway, + HttpCodes.ServiceUnavailable, + HttpCodes.GatewayTimeout +]; +const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; +const ExponentialBackoffCeiling = 10; +const ExponentialBackoffTimeSlice = 5; +class HttpClientError extends Error { + constructor(message, statusCode) { + super(message); + this.name = 'HttpClientError'; + this.statusCode = statusCode; + Object.setPrototypeOf(this, HttpClientError.prototype); + } +} +exports.HttpClientError = HttpClientError; +class HttpClientResponse { + constructor(message) { + this.message = message; + } + readBody() { + return new Promise(async (resolve, reject) => { + let output = Buffer.alloc(0); + this.message.on('data', (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on('end', () => { + resolve(output.toString()); + }); + }); + } +} +exports.HttpClientResponse = HttpClientResponse; +function isHttps(requestUrl) { + let parsedUrl = new URL(requestUrl); + return parsedUrl.protocol === 'https:'; +} +exports.isHttps = isHttps; +class HttpClient { + constructor(userAgent, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._allowRedirectDowngrade = false; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = userAgent; + this.handlers = handlers || []; + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; + } + this._socketTimeout = requestOptions.socketTimeout; + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.allowRedirectDowngrade != null) { + this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; + } + } + } + options(requestUrl, additionalHeaders) { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); + } + get(requestUrl, additionalHeaders) { + return this.request('GET', requestUrl, null, additionalHeaders || {}); + } + del(requestUrl, additionalHeaders) { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); + } + post(requestUrl, data, additionalHeaders) { + return this.request('POST', requestUrl, data, additionalHeaders || {}); + } + patch(requestUrl, data, additionalHeaders) { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); + } + put(requestUrl, data, additionalHeaders) { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); + } + head(requestUrl, additionalHeaders) { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); + } + sendStream(verb, requestUrl, stream, additionalHeaders) { + return this.request(verb, requestUrl, stream, additionalHeaders); + } + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + async getJson(requestUrl, additionalHeaders = {}) { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + let res = await this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async postJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async putJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async patchJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + async request(verb, requestUrl, data, headers) { + if (this._disposed) { + throw new Error('Client has already been disposed.'); + } + let parsedUrl = new URL(requestUrl); + let info = this._prepareRequest(verb, parsedUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 + ? this._maxRetries + 1 + : 1; + let numTries = 0; + let response; + while (numTries < maxTries) { + response = await this.requestRaw(info, data); + // Check if it's an authentication challenge + if (response && + response.message && + response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (let i = 0; i < this.handlers.length; i++) { + if (this.handlers[i].canHandleAuthentication(response)) { + authenticationHandler = this.handlers[i]; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info, data); + } + else { + // We have received an unauthorized response but have no handlers to handle it. + // Let the response return to the caller. + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && + this._allowRedirects && + redirectsRemaining > 0) { + const redirectUrl = response.message.headers['location']; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + let parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol == 'https:' && + parsedUrl.protocol != parsedRedirectUrl.protocol && + !this._allowRedirectDowngrade) { + throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); + } + // we need to finish reading the response before reassigning response + // which will leak the open socket. + await response.readBody(); + // strip authorization header if redirected to a different hostname + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (let header in headers) { + // header names are case insensitive + if (header.toLowerCase() === 'authorization') { + delete headers[header]; + } + } + } + // let's make the request with the new redirectUrl + info = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = await this.requestRaw(info, data); + redirectsRemaining--; + } + if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { + // If not a retry code, return immediately instead of retrying + return response; + } + numTries += 1; + if (numTries < maxTries) { + await response.readBody(); + await this._performExponentialBackoff(numTries); + } + } + return response; + } + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); + } + this._disposed = true; + } + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info, data) { + return new Promise((resolve, reject) => { + let callbackForResult = function (err, res) { + if (err) { + reject(err); + } + resolve(res); + }; + this.requestRawWithCallback(info, data, callbackForResult); + }); + } + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info, data, onResult) { + let socket; + if (typeof data === 'string') { + info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + } + let callbackCalled = false; + let handleResult = (err, res) => { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + }; + let req = info.httpModule.request(info.options, (msg) => { + let res = new HttpClientResponse(msg); + handleResult(null, res); + }); + req.on('socket', sock => { + socket = sock; + }); + // If we ever get disconnected, we want the socket to timeout eventually + req.setTimeout(this._socketTimeout || 3 * 60000, () => { + if (socket) { + socket.end(); + } + handleResult(new Error('Request timeout: ' + info.options.path), null); + }); + req.on('error', function (err) { + // err has statusCode property + // res should have headers + handleResult(err, null); + }); + if (data && typeof data === 'string') { + req.write(data, 'utf8'); + } + if (data && typeof data !== 'string') { + data.on('close', function () { + req.end(); + }); + data.pipe(req); + } + else { + req.end(); + } + } + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl) { + let parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); + } + _prepareRequest(method, requestUrl, headers) { + const info = {}; + info.parsedUrl = requestUrl; + const usingSsl = info.parsedUrl.protocol === 'https:'; + info.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info.options = {}; + info.options.host = info.parsedUrl.hostname; + info.options.port = info.parsedUrl.port + ? parseInt(info.parsedUrl.port) + : defaultPort; + info.options.path = + (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); + info.options.method = method; + info.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info.options.headers['user-agent'] = this.userAgent; + } + info.options.agent = this._getAgent(info.parsedUrl); + // gives handlers an opportunity to participate + if (this.handlers) { + this.handlers.forEach(handler => { + handler.prepareRequest(info.options); + }); + } + return info; + } + _mergeHeaders(headers) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); + } + return lowercaseKeys(headers || {}); + } + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; + } + return additionalHeaders[header] || clientHeader || _default; + } + _getAgent(parsedUrl) { + let agent; + let proxyUrl = pm.getProxyUrl(parsedUrl); + let useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (this._keepAlive && !useProxy) { + agent = this._agent; + } + // if agent is already assigned use that agent. + if (!!agent) { + return agent; + } + const usingSsl = parsedUrl.protocol === 'https:'; + let maxSockets = 100; + if (!!this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; + } + if (useProxy) { + // If using proxy, need tunnel + if (!tunnel) { + tunnel = require('tunnel'); + } + const agentOptions = { + maxSockets: maxSockets, + keepAlive: this._keepAlive, + proxy: { + proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`, + host: proxyUrl.hostname, + port: proxyUrl.port + } + }; + let tunnelAgent; + const overHttps = proxyUrl.protocol === 'https:'; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; + } + else { + tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; + } + // if reusing agent across request and tunneling agent isn't assigned create a new agent + if (this._keepAlive && !agent) { + const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; + } + // if not using private agent and tunnel agent isn't setup then use global agent + if (!agent) { + agent = usingSsl ? https.globalAgent : http.globalAgent; + } + if (usingSsl && this._ignoreSslError) { + // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process + // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options + // we have to cast it to any and change it directly + agent.options = Object.assign(agent.options || {}, { + rejectUnauthorized: false + }); + } + return agent; + } + _performExponentialBackoff(retryNumber) { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); + } + static dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + let a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + async _processResponse(res, options) { + return new Promise(async (resolve, reject) => { + const statusCode = res.message.statusCode; + const response = { + statusCode: statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode == HttpCodes.NotFound) { + resolve(response); + } + let obj; + let contents; + // get the result from the body + try { + contents = await res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); + } + else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } + catch (err) { + // Invalid resource (contents not json); leaving result obj null + } + // note that 3xx redirects are handled by the http layer. + if (statusCode > 299) { + let msg; + // if exception/error in body, attempt to get better error + if (obj && obj.message) { + msg = obj.message; + } + else if (contents && contents.length > 0) { + // it may be the case that the exception is in the body message as string + msg = contents; + } + else { + msg = 'Failed request: (' + statusCode + ')'; + } + let err = new HttpClientError(msg, statusCode); + err.result = response.result; + reject(err); + } + else { + resolve(response); + } + }); + } +} +exports.HttpClient = HttpClient; diff --git a/node_modules/@actions/http-client/interfaces.d.ts b/node_modules/@actions/http-client/interfaces.d.ts new file mode 100644 index 0000000..78bd85b --- /dev/null +++ b/node_modules/@actions/http-client/interfaces.d.ts @@ -0,0 +1,49 @@ +/// +import http = require('http'); +export interface IHeaders { + [key: string]: any; +} +export interface IHttpClient { + options(requestUrl: string, additionalHeaders?: IHeaders): Promise; + get(requestUrl: string, additionalHeaders?: IHeaders): Promise; + del(requestUrl: string, additionalHeaders?: IHeaders): Promise; + post(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise; + patch(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise; + put(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise; + sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: IHeaders): Promise; + request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: IHeaders): Promise; + requestRaw(info: IRequestInfo, data: string | NodeJS.ReadableStream): Promise; + requestRawWithCallback(info: IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: IHttpClientResponse) => void): void; +} +export interface IRequestHandler { + prepareRequest(options: http.RequestOptions): void; + canHandleAuthentication(response: IHttpClientResponse): boolean; + handleAuthentication(httpClient: IHttpClient, requestInfo: IRequestInfo, objs: any): Promise; +} +export interface IHttpClientResponse { + message: http.IncomingMessage; + readBody(): Promise; +} +export interface IRequestInfo { + options: http.RequestOptions; + parsedUrl: URL; + httpModule: any; +} +export interface IRequestOptions { + headers?: IHeaders; + socketTimeout?: number; + ignoreSslError?: boolean; + allowRedirects?: boolean; + allowRedirectDowngrade?: boolean; + maxRedirects?: number; + maxSockets?: number; + keepAlive?: boolean; + deserializeDates?: boolean; + allowRetries?: boolean; + maxRetries?: number; +} +export interface ITypedResponse { + statusCode: number; + result: T | null; + headers: Object; +} diff --git a/node_modules/@actions/http-client/interfaces.js b/node_modules/@actions/http-client/interfaces.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/node_modules/@actions/http-client/interfaces.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/node_modules/@actions/http-client/package.json b/node_modules/@actions/http-client/package.json new file mode 100644 index 0000000..82e5a95 --- /dev/null +++ b/node_modules/@actions/http-client/package.json @@ -0,0 +1,39 @@ +{ + "name": "@actions/http-client", + "version": "1.0.9", + "description": "Actions Http Client", + "main": "index.js", + "scripts": { + "build": "rm -Rf ./_out && tsc && cp package*.json ./_out && cp *.md ./_out && cp LICENSE ./_out && cp actions.png ./_out", + "test": "jest", + "format": "prettier --write *.ts && prettier --write **/*.ts", + "format-check": "prettier --check *.ts && prettier --check **/*.ts", + "audit-check": "npm audit --audit-level=moderate" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/actions/http-client.git" + }, + "keywords": [ + "Actions", + "Http" + ], + "author": "GitHub, Inc.", + "license": "MIT", + "bugs": { + "url": "https://github.com/actions/http-client/issues" + }, + "homepage": "https://github.com/actions/http-client#readme", + "devDependencies": { + "@types/jest": "^25.1.4", + "@types/node": "^12.12.31", + "jest": "^25.1.0", + "prettier": "^2.0.4", + "proxy": "^1.0.1", + "ts-jest": "^25.2.1", + "typescript": "^3.8.3" + }, + "dependencies": { + "tunnel": "0.0.6" + } +} diff --git a/node_modules/@actions/http-client/proxy.d.ts b/node_modules/@actions/http-client/proxy.d.ts new file mode 100644 index 0000000..4599865 --- /dev/null +++ b/node_modules/@actions/http-client/proxy.d.ts @@ -0,0 +1,2 @@ +export declare function getProxyUrl(reqUrl: URL): URL | undefined; +export declare function checkBypass(reqUrl: URL): boolean; diff --git a/node_modules/@actions/http-client/proxy.js b/node_modules/@actions/http-client/proxy.js new file mode 100644 index 0000000..88f00ec --- /dev/null +++ b/node_modules/@actions/http-client/proxy.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function getProxyUrl(reqUrl) { + let usingSsl = reqUrl.protocol === 'https:'; + let proxyUrl; + if (checkBypass(reqUrl)) { + return proxyUrl; + } + let proxyVar; + if (usingSsl) { + proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; + } + else { + proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; + } + if (proxyVar) { + proxyUrl = new URL(proxyVar); + } + return proxyUrl; +} +exports.getProxyUrl = getProxyUrl; +function checkBypass(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; + if (!noProxy) { + return false; + } + // Determine the request port + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } + else if (reqUrl.protocol === 'http:') { + reqPort = 80; + } + else if (reqUrl.protocol === 'https:') { + reqPort = 443; + } + // Format the request hostname and hostname with port + let upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === 'number') { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + // Compare request host against noproxy + for (let upperNoProxyItem of noProxy + .split(',') + .map(x => x.trim().toUpperCase()) + .filter(x => x)) { + if (upperReqHosts.some(x => x === upperNoProxyItem)) { + return true; + } + } + return false; +} +exports.checkBypass = checkBypass; diff --git a/node_modules/@actions/io/LICENSE.md b/node_modules/@actions/io/LICENSE.md deleted file mode 100644 index e5a73f4..0000000 --- a/node_modules/@actions/io/LICENSE.md +++ /dev/null @@ -1,7 +0,0 @@ -Copyright 2019 GitHub - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/@actions/io/README.md b/node_modules/@actions/io/README.md index 22f0901..9aadf2f 100644 --- a/node_modules/@actions/io/README.md +++ b/node_modules/@actions/io/README.md @@ -8,7 +8,7 @@ Recursively make a directory. Follows rules specified in [man mkdir](https://linux.die.net/man/1/mkdir) with the `-p` option specified: -``` +```js const io = require('@actions/io'); await io.mkdirP('path/to/make'); @@ -18,7 +18,7 @@ await io.mkdirP('path/to/make'); Copy or move files or folders. Follows rules specified in [man cp](https://linux.die.net/man/1/cp) and [man mv](https://linux.die.net/man/1/mv): -``` +```js const io = require('@actions/io'); // Recursive must be true for directories @@ -32,7 +32,7 @@ await io.mv('path/to/file', 'path/to/dest'); Remove a file or folder recursively. Follows rules specified in [man rm](https://linux.die.net/man/1/rm) with the `-r` and `-f` rules specified. -``` +```js const io = require('@actions/io'); await io.rmRF('path/to/directory'); @@ -43,7 +43,7 @@ await io.rmRF('path/to/file'); Get the path to a tool and resolves via paths. Follows the rules specified in [man which](https://linux.die.net/man/1/which). -``` +```js const exec = require('@actions/exec'); const io = require('@actions/io'); diff --git a/node_modules/@actions/io/lib/io-util.js b/node_modules/@actions/io/lib/io-util.js index d0d1f6b..17b3bba 100644 --- a/node_modules/@actions/io/lib/io-util.js +++ b/node_modules/@actions/io/lib/io-util.js @@ -1,9 +1,10 @@ "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; diff --git a/node_modules/@actions/io/lib/io-util.js.map b/node_modules/@actions/io/lib/io-util.js.map index 95283d2..76cd3b9 100644 --- a/node_modules/@actions/io/lib/io-util.js.map +++ b/node_modules/@actions/io/lib/io-util.js.map @@ -1 +1 @@ -{"version":3,"file":"io-util.js","sourceRoot":"","sources":["../src/io-util.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"io-util.js","sourceRoot":"","sources":["../src/io-util.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@actions/io/lib/io.js b/node_modules/@actions/io/lib/io.js index 8ac31f2..ad5bdb9 100644 --- a/node_modules/@actions/io/lib/io.js +++ b/node_modules/@actions/io/lib/io.js @@ -1,9 +1,10 @@ "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; @@ -204,9 +205,9 @@ function which(tool, check) { } // build the list of directories // - // Note, technically "where" checks the current directory on Windows. From a task lib perspective, + // Note, technically "where" checks the current directory on Windows. From a toolkit perspective, // it feels like we should not do this. Checking the current directory seems like more of a use - // case of a shell, and the which() function exposed by the task lib should strive for consistency + // case of a shell, and the which() function exposed by the toolkit should strive for consistency // across platforms. const directories = []; if (process.env.PATH) { diff --git a/node_modules/@actions/io/lib/io.js.map b/node_modules/@actions/io/lib/io.js.map index e52fe05..91db963 100644 --- a/node_modules/@actions/io/lib/io.js.map +++ b/node_modules/@actions/io/lib/io.js.map @@ -1 +1 @@ -{"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@actions/io/package.json b/node_modules/@actions/io/package.json index 71a0840..0fd128e 100644 --- a/node_modules/@actions/io/package.json +++ b/node_modules/@actions/io/package.json @@ -1,35 +1,16 @@ { - "_from": "@actions/io@^1.0.0", - "_id": "@actions/io@1.0.0", - "_inBundle": false, - "_integrity": "sha512-ezrJSRdqtXtdx1WXlfYL85+40F7gB39jCK9P0jZVODW3W6xUYmu6ZOEc/UmmElUwhRyDRm1R4yNZu1Joq2kuQg==", - "_location": "/@actions/io", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "@actions/io@^1.0.0", - "name": "@actions/io", - "escapedName": "@actions%2fio", - "scope": "@actions", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "#DEV:/", - "/@actions/tool-cache" - ], - "_resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.0.tgz", - "_shasum": "379454174660623bb5b3bce0be8b9e2285a62bcb", - "_spec": "@actions/io@^1.0.0", - "_where": "C:\\Users\\damccorm\\Documents\\setup-go\\node_modules\\@actions\\tool-cache", - "bugs": { - "url": "https://github.com/actions/toolkit/issues" - }, - "bundleDependencies": false, - "deprecated": false, + "name": "@actions/io", + "version": "1.0.2", "description": "Actions io lib", + "keywords": [ + "github", + "actions", + "io" + ], + "homepage": "https://github.com/actions/toolkit/tree/master/packages/io", + "license": "MIT", + "main": "lib/io.js", + "types": "lib/io.d.ts", "directories": { "lib": "lib", "test": "__tests__" @@ -37,25 +18,20 @@ "files": [ "lib" ], - "gitHead": "a40bce7c8d382aa3dbadaa327acbc696e9390e55", - "homepage": "https://github.com/actions/toolkit/tree/master/packages/io", - "keywords": [ - "io", - "actions" - ], - "license": "MIT", - "main": "lib/io.js", - "name": "@actions/io", "publishConfig": { "access": "public" }, "repository": { "type": "git", - "url": "git+https://github.com/actions/toolkit.git" + "url": "git+https://github.com/actions/toolkit.git", + "directory": "packages/io" }, "scripts": { + "audit-moderate": "npm install && npm audit --audit-level=moderate", "test": "echo \"Error: run tests from root\" && exit 1", "tsc": "tsc" }, - "version": "1.0.0" + "bugs": { + "url": "https://github.com/actions/toolkit/issues" + } } diff --git a/node_modules/@actions/tool-cache/LICENSE.md b/node_modules/@actions/tool-cache/LICENSE.md index e5a73f4..dbae2ed 100644 --- a/node_modules/@actions/tool-cache/LICENSE.md +++ b/node_modules/@actions/tool-cache/LICENSE.md @@ -1,3 +1,5 @@ +The MIT License (MIT) + Copyright 2019 GitHub Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/node_modules/@actions/tool-cache/README.md b/node_modules/@actions/tool-cache/README.md index 56c5353..d3da0c3 100644 --- a/node_modules/@actions/tool-cache/README.md +++ b/node_modules/@actions/tool-cache/README.md @@ -8,44 +8,48 @@ You can use this to download tools (or other files) from a download URL: -``` +```js const tc = require('@actions/tool-cache'); -const node12Path = await tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz'); +const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz'); ``` #### Extract These can then be extracted in platform specific ways: -``` +```js const tc = require('@actions/tool-cache'); if (process.platform === 'win32') { - tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip'); + const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip'); const node12ExtractedFolder = await tc.extractZip(node12Path, 'path/to/extract/to'); - + // Or alternately - tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z'); + const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z'); const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to'); } +else if (process.platform === 'darwin') { + const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0.pkg'); + const node12ExtractedFolder = await tc.extractXar(node12Path, 'path/to/extract/to'); +} else { - const node12Path = await tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz'); + const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz'); const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to'); } ``` #### Cache -Finally, you can cache these directories in our tool-cache. This is useful if you want to switch back and forth between versions of a tool, or save a tool between runs for private runners (private runners are still in development but are on the roadmap). +Finally, you can cache these directories in our tool-cache. This is useful if you want to switch back and forth between versions of a tool, or save a tool between runs for self-hosted runners. You'll often want to add it to the path as part of this step: -``` +```js const tc = require('@actions/tool-cache'); const core = require('@actions/core'); -const node12Path = await tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz'); +const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz'); const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to'); const cachedPath = await tc.cacheDir(node12ExtractedFolder, 'node', '12.7.0'); @@ -54,17 +58,17 @@ core.addPath(cachedPath); You can also cache files for reuse. -``` +```js const tc = require('@actions/tool-cache'); -tc.cacheFile('path/to/exe', 'destFileName.exe', 'myExeName', '1.1.0'); +const cachedPath = await tc.cacheFile('path/to/exe', 'destFileName.exe', 'myExeName', '1.1.0'); ``` #### Find Finally, you can find directories and files you've previously cached: -``` +```js const tc = require('@actions/tool-cache'); const core = require('@actions/core'); @@ -74,7 +78,7 @@ core.addPath(nodeDirectory); You can even find all cached versions of a tool: -``` +```js const tc = require('@actions/tool-cache'); const allNodeVersions = tc.findAllVersions('node'); diff --git a/node_modules/@actions/tool-cache/lib/manifest.d.ts b/node_modules/@actions/tool-cache/lib/manifest.d.ts new file mode 100644 index 0000000..8c32f3e --- /dev/null +++ b/node_modules/@actions/tool-cache/lib/manifest.d.ts @@ -0,0 +1,16 @@ +export interface IToolReleaseFile { + filename: string; + platform: string; + platform_version?: string; + arch: string; + download_url: string; +} +export interface IToolRelease { + version: string; + stable: boolean; + release_url: string; + files: IToolReleaseFile[]; +} +export declare function _findMatch(versionSpec: string, stable: boolean, candidates: IToolRelease[], archFilter: string): Promise; +export declare function _getOsVersion(): string; +export declare function _readLinuxVersionFile(): string; diff --git a/node_modules/@actions/tool-cache/lib/manifest.js b/node_modules/@actions/tool-cache/lib/manifest.js new file mode 100644 index 0000000..40c886b --- /dev/null +++ b/node_modules/@actions/tool-cache/lib/manifest.js @@ -0,0 +1,106 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const semver = __importStar(require("semver")); +const core_1 = require("@actions/core"); +// needs to be require for core node modules to be mocked +/* eslint @typescript-eslint/no-require-imports: 0 */ +const os = require("os"); +const cp = require("child_process"); +const fs = require("fs"); +function _findMatch(versionSpec, stable, candidates, archFilter) { + return __awaiter(this, void 0, void 0, function* () { + const platFilter = os.platform(); + let result; + let match; + let file; + for (const candidate of candidates) { + const version = candidate.version; + core_1.debug(`check ${version} satisfies ${versionSpec}`); + if (semver.satisfies(version, versionSpec) && + (!stable || candidate.stable === stable)) { + file = candidate.files.find(item => { + core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); + let chk = item.arch === archFilter && item.platform === platFilter; + if (chk && item.platform_version) { + const osVersion = module.exports._getOsVersion(); + if (osVersion === item.platform_version) { + chk = true; + } + else { + chk = semver.satisfies(osVersion, item.platform_version); + } + } + return chk; + }); + if (file) { + core_1.debug(`matched ${candidate.version}`); + match = candidate; + break; + } + } + } + if (match && file) { + // clone since we're mutating the file list to be only the file that matches + result = Object.assign({}, match); + result.files = [file]; + } + return result; + }); +} +exports._findMatch = _findMatch; +function _getOsVersion() { + // TODO: add windows and other linux, arm variants + // right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python) + const plat = os.platform(); + let version = ''; + if (plat === 'darwin') { + version = cp.execSync('sw_vers -productVersion').toString(); + } + else if (plat === 'linux') { + // lsb_release process not in some containers, readfile + // Run cat /etc/lsb-release + // DISTRIB_ID=Ubuntu + // DISTRIB_RELEASE=18.04 + // DISTRIB_CODENAME=bionic + // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" + const lsbContents = module.exports._readLinuxVersionFile(); + if (lsbContents) { + const lines = lsbContents.split('\n'); + for (const line of lines) { + const parts = line.split('='); + if (parts.length === 2 && parts[0].trim() === 'DISTRIB_RELEASE') { + version = parts[1].trim(); + break; + } + } + } + } + return version; +} +exports._getOsVersion = _getOsVersion; +function _readLinuxVersionFile() { + const lsbFile = '/etc/lsb-release'; + let contents = ''; + if (fs.existsSync(lsbFile)) { + contents = fs.readFileSync(lsbFile).toString(); + } + return contents; +} +exports._readLinuxVersionFile = _readLinuxVersionFile; +//# sourceMappingURL=manifest.js.map \ No newline at end of file diff --git a/node_modules/@actions/tool-cache/lib/manifest.js.map b/node_modules/@actions/tool-cache/lib/manifest.js.map new file mode 100644 index 0000000..8acbaaa --- /dev/null +++ b/node_modules/@actions/tool-cache/lib/manifest.js.map @@ -0,0 +1 @@ +{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@actions/tool-cache/lib/retry-helper.d.ts b/node_modules/@actions/tool-cache/lib/retry-helper.d.ts new file mode 100644 index 0000000..4707a07 --- /dev/null +++ b/node_modules/@actions/tool-cache/lib/retry-helper.d.ts @@ -0,0 +1,12 @@ +/** + * Internal class for retries + */ +export declare class RetryHelper { + private maxAttempts; + private minSeconds; + private maxSeconds; + constructor(maxAttempts: number, minSeconds: number, maxSeconds: number); + execute(action: () => Promise, isRetryable?: (e: Error) => boolean): Promise; + private getSleepAmount; + private sleep; +} diff --git a/node_modules/@actions/tool-cache/lib/retry-helper.js b/node_modules/@actions/tool-cache/lib/retry-helper.js new file mode 100644 index 0000000..4f040d6 --- /dev/null +++ b/node_modules/@actions/tool-cache/lib/retry-helper.js @@ -0,0 +1,70 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const core = __importStar(require("@actions/core")); +/** + * Internal class for retries + */ +class RetryHelper { + constructor(maxAttempts, minSeconds, maxSeconds) { + if (maxAttempts < 1) { + throw new Error('max attempts should be greater than or equal to 1'); + } + this.maxAttempts = maxAttempts; + this.minSeconds = Math.floor(minSeconds); + this.maxSeconds = Math.floor(maxSeconds); + if (this.minSeconds > this.maxSeconds) { + throw new Error('min seconds should be less than or equal to max seconds'); + } + } + execute(action, isRetryable) { + return __awaiter(this, void 0, void 0, function* () { + let attempt = 1; + while (attempt < this.maxAttempts) { + // Try + try { + return yield action(); + } + catch (err) { + if (isRetryable && !isRetryable(err)) { + throw err; + } + core.info(err.message); + } + // Sleep + const seconds = this.getSleepAmount(); + core.info(`Waiting ${seconds} seconds before trying again`); + yield this.sleep(seconds); + attempt++; + } + // Last attempt + return yield action(); + }); + } + getSleepAmount() { + return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + + this.minSeconds); + } + sleep(seconds) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => setTimeout(resolve, seconds * 1000)); + }); + } +} +exports.RetryHelper = RetryHelper; +//# sourceMappingURL=retry-helper.js.map \ No newline at end of file diff --git a/node_modules/@actions/tool-cache/lib/retry-helper.js.map b/node_modules/@actions/tool-cache/lib/retry-helper.js.map new file mode 100644 index 0000000..7607d6b --- /dev/null +++ b/node_modules/@actions/tool-cache/lib/retry-helper.js.map @@ -0,0 +1 @@ +{"version":3,"file":"retry-helper.js","sourceRoot":"","sources":["../src/retry-helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,oDAAqC;AAErC;;GAEG;AACH,MAAa,WAAW;IAKtB,YAAY,WAAmB,EAAE,UAAkB,EAAE,UAAkB;QACrE,IAAI,WAAW,GAAG,CAAC,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;SACrE;QAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACxC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;SAC3E;IACH,CAAC;IAEK,OAAO,CACX,MAAwB,EACxB,WAAmC;;YAEnC,IAAI,OAAO,GAAG,CAAC,CAAA;YACf,OAAO,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;gBACjC,MAAM;gBACN,IAAI;oBACF,OAAO,MAAM,MAAM,EAAE,CAAA;iBACtB;gBAAC,OAAO,GAAG,EAAE;oBACZ,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;wBACpC,MAAM,GAAG,CAAA;qBACV;oBAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;iBACvB;gBAED,QAAQ;gBACR,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;gBACrC,IAAI,CAAC,IAAI,CAAC,WAAW,OAAO,8BAA8B,CAAC,CAAA;gBAC3D,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBACzB,OAAO,EAAE,CAAA;aACV;YAED,eAAe;YACf,OAAO,MAAM,MAAM,EAAE,CAAA;QACvB,CAAC;KAAA;IAEO,cAAc;QACpB,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,UAAU,CAChB,CAAA;IACH,CAAC;IAEa,KAAK,CAAC,OAAe;;YACjC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC,CAAA;QACpE,CAAC;KAAA;CACF;AAxDD,kCAwDC"} \ No newline at end of file diff --git a/node_modules/@actions/tool-cache/lib/tool-cache.d.ts b/node_modules/@actions/tool-cache/lib/tool-cache.d.ts index 877eb33..090792d 100644 --- a/node_modules/@actions/tool-cache/lib/tool-cache.d.ts +++ b/node_modules/@actions/tool-cache/lib/tool-cache.d.ts @@ -1,3 +1,4 @@ +import * as mm from './manifest'; export declare class HTTPError extends Error { readonly httpStatusCode: number | undefined; constructor(httpStatusCode: number | undefined); @@ -6,9 +7,11 @@ export declare class HTTPError extends Error { * Download a tool from an url and stream it into a file * * @param url url of tool to download + * @param dest path to download tool + * @param auth authorization header * @returns path to downloaded tool */ -export declare function downloadTool(url: string): Promise; +export declare function downloadTool(url: string, dest?: string, auth?: string): Promise; /** * Extract a .7z file * @@ -26,13 +29,23 @@ export declare function downloadTool(url: string): Promise; */ export declare function extract7z(file: string, dest?: string, _7zPath?: string): Promise; /** - * Extract a tar + * Extract a compressed tar archive * * @param file path to the tar * @param dest destination directory. Optional. + * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional. * @returns path to the destination directory */ -export declare function extractTar(file: string, dest?: string): Promise; +export declare function extractTar(file: string, dest?: string, flags?: string | string[]): Promise; +/** + * Extract a xar compatible archive + * + * @param file path to the archive + * @param dest destination directory. Optional. + * @param flags flags for the xar. Optional. + * @returns path to the destination directory + */ +export declare function extractXar(file: string, dest?: string, flags?: string | string[]): Promise; /** * Extract a zip * @@ -76,3 +89,7 @@ export declare function find(toolName: string, versionSpec: string, arch?: strin * @param arch optional arch. defaults to arch of computer */ export declare function findAllVersions(toolName: string, arch?: string): string[]; +export declare type IToolRelease = mm.IToolRelease; +export declare type IToolReleaseFile = mm.IToolReleaseFile; +export declare function getManifestFromRepo(owner: string, repo: string, auth?: string, branch?: string): Promise; +export declare function findFromManifest(versionSpec: string, stable: boolean, manifest: IToolRelease[], archFilter?: string): Promise; diff --git a/node_modules/@actions/tool-cache/lib/tool-cache.js b/node_modules/@actions/tool-cache/lib/tool-cache.js index 3c12165..eb99e06 100644 --- a/node_modules/@actions/tool-cache/lib/tool-cache.js +++ b/node_modules/@actions/tool-cache/lib/tool-cache.js @@ -1,23 +1,38 @@ "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -const core = require("@actions/core"); -const io = require("@actions/io"); -const fs = require("fs"); -const os = require("os"); -const path = require("path"); -const httpm = require("typed-rest-client/HttpClient"); -const semver = require("semver"); -const uuidV4 = require("uuid/v4"); +const core = __importStar(require("@actions/core")); +const io = __importStar(require("@actions/io")); +const fs = __importStar(require("fs")); +const mm = __importStar(require("./manifest")); +const os = __importStar(require("os")); +const path = __importStar(require("path")); +const httpm = __importStar(require("@actions/http-client")); +const semver = __importStar(require("semver")); +const stream = __importStar(require("stream")); +const util = __importStar(require("util")); +const v4_1 = __importDefault(require("uuid/v4")); const exec_1 = require("@actions/exec/lib/exec"); const assert_1 = require("assert"); +const retry_helper_1 = require("./retry-helper"); class HTTPError extends Error { constructor(httpStatusCode) { super(`Unexpected HTTP response: ${httpStatusCode}`); @@ -27,86 +42,90 @@ class HTTPError extends Error { } exports.HTTPError = HTTPError; const IS_WINDOWS = process.platform === 'win32'; +const IS_MAC = process.platform === 'darwin'; const userAgent = 'actions/tool-cache'; -// On load grab temp directory and cache directory and remove them from env (currently don't want to expose this) -let tempDirectory = process.env['RUNNER_TEMP'] || ''; -let cacheRoot = process.env['RUNNER_TOOL_CACHE'] || ''; -// If directories not found, place them in common temp locations -if (!tempDirectory || !cacheRoot) { - let baseLocation; - if (IS_WINDOWS) { - // On windows use the USERPROFILE env variable - baseLocation = process.env['USERPROFILE'] || 'C:\\'; - } - else { - if (process.platform === 'darwin') { - baseLocation = '/Users'; - } - else { - baseLocation = '/home'; - } - } - if (!tempDirectory) { - tempDirectory = path.join(baseLocation, 'actions', 'temp'); - } - if (!cacheRoot) { - cacheRoot = path.join(baseLocation, 'actions', 'cache'); - } -} /** * Download a tool from an url and stream it into a file * * @param url url of tool to download + * @param dest path to download tool + * @param auth authorization header * @returns path to downloaded tool */ -function downloadTool(url) { +function downloadTool(url, dest, auth) { return __awaiter(this, void 0, void 0, function* () { - // Wrap in a promise so that we can resolve from within stream callbacks - return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { - try { - const http = new httpm.HttpClient(userAgent, [], { - allowRetries: true, - maxRetries: 3 - }); - const destPath = path.join(tempDirectory, uuidV4()); - yield io.mkdirP(tempDirectory); - core.debug(`Downloading ${url}`); - core.debug(`Downloading ${destPath}`); - if (fs.existsSync(destPath)) { - throw new Error(`Destination file path ${destPath} already exists`); - } - const response = yield http.get(url); - if (response.message.statusCode !== 200) { - const err = new HTTPError(response.message.statusCode); - core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); - throw err; + dest = dest || path.join(_getTempDirectory(), v4_1.default()); + yield io.mkdirP(path.dirname(dest)); + core.debug(`Downloading ${url}`); + core.debug(`Destination ${dest}`); + const maxAttempts = 3; + const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10); + const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); + const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); + return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { + return yield downloadToolAttempt(url, dest || '', auth); + }), (err) => { + if (err instanceof HTTPError && err.httpStatusCode) { + // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests + if (err.httpStatusCode < 500 && + err.httpStatusCode !== 408 && + err.httpStatusCode !== 429) { + return false; } - const file = fs.createWriteStream(destPath); - file.on('open', () => __awaiter(this, void 0, void 0, function* () { - try { - const stream = response.message.pipe(file); - stream.on('close', () => { - core.debug('download complete'); - resolve(destPath); - }); - } - catch (err) { - core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); - reject(err); - } - })); - file.on('error', err => { - file.end(); - reject(err); - }); } - catch (err) { - reject(err); - } - })); + // Otherwise retry + return true; + }); }); } exports.downloadTool = downloadTool; +function downloadToolAttempt(url, dest, auth) { + return __awaiter(this, void 0, void 0, function* () { + if (fs.existsSync(dest)) { + throw new Error(`Destination file path ${dest} already exists`); + } + // Get the response headers + const http = new httpm.HttpClient(userAgent, [], { + allowRetries: false + }); + let headers; + if (auth) { + core.debug('set auth'); + headers = { + authorization: auth + }; + } + const response = yield http.get(url, headers); + if (response.message.statusCode !== 200) { + const err = new HTTPError(response.message.statusCode); + core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); + throw err; + } + // Download the response body + const pipeline = util.promisify(stream.pipeline); + const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message); + const readStream = responseMessageFactory(); + let succeeded = false; + try { + yield pipeline(readStream, fs.createWriteStream(dest)); + core.debug('download complete'); + succeeded = true; + return dest; + } + finally { + // Error, delete dest before retry + if (!succeeded) { + core.debug('download failed'); + try { + yield io.rmRF(dest); + } + catch (err) { + core.debug(`Failed to delete '${dest}'. ${err.message}`); + } + } + } + }); +} /** * Extract a .7z file * @@ -126,14 +145,15 @@ function extract7z(file, dest, _7zPath) { return __awaiter(this, void 0, void 0, function* () { assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS'); assert_1.ok(file, 'parameter "file" is required'); - dest = dest || (yield _createExtractFolder(dest)); + dest = yield _createExtractFolder(dest); const originalCwd = process.cwd(); process.chdir(dest); if (_7zPath) { try { + const logLevel = core.isDebug() ? '-bb1' : '-bb0'; const args = [ 'x', - '-bb1', + logLevel, '-bd', '-sccUTF-8', file @@ -181,24 +201,93 @@ function extract7z(file, dest, _7zPath) { } exports.extract7z = extract7z; /** - * Extract a tar + * Extract a compressed tar archive * * @param file path to the tar * @param dest destination directory. Optional. + * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional. * @returns path to the destination directory */ -function extractTar(file, dest) { +function extractTar(file, dest, flags = 'xz') { return __awaiter(this, void 0, void 0, function* () { if (!file) { throw new Error("parameter 'file' is required"); } - dest = dest || (yield _createExtractFolder(dest)); - const tarPath = yield io.which('tar', true); - yield exec_1.exec(`"${tarPath}"`, ['xzC', dest, '-f', file]); + // Create dest + dest = yield _createExtractFolder(dest); + // Determine whether GNU tar + core.debug('Checking tar --version'); + let versionOutput = ''; + yield exec_1.exec('tar --version', [], { + ignoreReturnCode: true, + silent: true, + listeners: { + stdout: (data) => (versionOutput += data.toString()), + stderr: (data) => (versionOutput += data.toString()) + } + }); + core.debug(versionOutput.trim()); + const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); + // Initialize args + let args; + if (flags instanceof Array) { + args = flags; + } + else { + args = [flags]; + } + if (core.isDebug() && !flags.includes('v')) { + args.push('-v'); + } + let destArg = dest; + let fileArg = file; + if (IS_WINDOWS && isGnuTar) { + args.push('--force-local'); + destArg = dest.replace(/\\/g, '/'); + // Technically only the dest needs to have `/` but for aesthetic consistency + // convert slashes in the file arg too. + fileArg = file.replace(/\\/g, '/'); + } + if (isGnuTar) { + // Suppress warnings when using GNU tar to extract archives created by BSD tar + args.push('--warning=no-unknown-keyword'); + } + args.push('-C', destArg, '-f', fileArg); + yield exec_1.exec(`tar`, args); return dest; }); } exports.extractTar = extractTar; +/** + * Extract a xar compatible archive + * + * @param file path to the archive + * @param dest destination directory. Optional. + * @param flags flags for the xar. Optional. + * @returns path to the destination directory + */ +function extractXar(file, dest, flags = []) { + return __awaiter(this, void 0, void 0, function* () { + assert_1.ok(IS_MAC, 'extractXar() not supported on current OS'); + assert_1.ok(file, 'parameter "file" is required'); + dest = yield _createExtractFolder(dest); + let args; + if (flags instanceof Array) { + args = flags; + } + else { + args = [flags]; + } + args.push('-x', '-C', dest, '-f', file); + if (core.isDebug()) { + args.push('-v'); + } + const xarPath = yield io.which('xar', true); + yield exec_1.exec(`"${xarPath}"`, _unique(args)); + return dest; + }); +} +exports.extractXar = extractXar; /** * Extract a zip * @@ -211,7 +300,7 @@ function extractZip(file, dest) { if (!file) { throw new Error("parameter 'file' is required"); } - dest = dest || (yield _createExtractFolder(dest)); + dest = yield _createExtractFolder(dest); if (IS_WINDOWS) { yield extractZipWin(file, dest); } @@ -229,7 +318,7 @@ function extractZipWin(file, dest) { const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`; // run powershell - const powershellPath = yield io.which('powershell'); + const powershellPath = yield io.which('powershell', true); const args = [ '-NoLogo', '-Sta', @@ -245,8 +334,12 @@ function extractZipWin(file, dest) { } function extractZipNix(file, dest) { return __awaiter(this, void 0, void 0, function* () { - const unzipPath = path.join(__dirname, '..', 'scripts', 'externals', 'unzip'); - yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest }); + const unzipPath = yield io.which('unzip', true); + const args = [file]; + if (!core.isDebug()) { + args.unshift('-q'); + } + yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest }); }); } /** @@ -337,7 +430,7 @@ function find(toolName, versionSpec, arch) { let toolPath = ''; if (versionSpec) { versionSpec = semver.clean(versionSpec) || ''; - const cachePath = path.join(cacheRoot, toolName, versionSpec, arch); + const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch); core.debug(`checking cache: ${cachePath}`); if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); @@ -359,7 +452,7 @@ exports.find = find; function findAllVersions(toolName, arch) { const versions = []; arch = arch || os.arch(); - const toolPath = path.join(cacheRoot, toolName); + const toolPath = path.join(_getCacheDirectory(), toolName); if (fs.existsSync(toolPath)) { const children = fs.readdirSync(toolPath); for (const child of children) { @@ -374,11 +467,56 @@ function findAllVersions(toolName, arch) { return versions; } exports.findAllVersions = findAllVersions; +function getManifestFromRepo(owner, repo, auth, branch = 'master') { + return __awaiter(this, void 0, void 0, function* () { + let releases = []; + const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}`; + const http = new httpm.HttpClient('tool-cache'); + const headers = {}; + if (auth) { + core.debug('set auth'); + headers.authorization = auth; + } + const response = yield http.getJson(treeUrl, headers); + if (!response.result) { + return releases; + } + let manifestUrl = ''; + for (const item of response.result.tree) { + if (item.path === 'versions-manifest.json') { + manifestUrl = item.url; + break; + } + } + headers['accept'] = 'application/vnd.github.VERSION.raw'; + let versionsRaw = yield (yield http.get(manifestUrl, headers)).readBody(); + if (versionsRaw) { + // shouldn't be needed but protects against invalid json saved with BOM + versionsRaw = versionsRaw.replace(/^\uFEFF/, ''); + try { + releases = JSON.parse(versionsRaw); + } + catch (_a) { + core.debug('Invalid json'); + } + } + return releases; + }); +} +exports.getManifestFromRepo = getManifestFromRepo; +function findFromManifest(versionSpec, stable, manifest, archFilter = os.arch()) { + return __awaiter(this, void 0, void 0, function* () { + // wrap the internal impl + const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter); + return match; + }); +} +exports.findFromManifest = findFromManifest; function _createExtractFolder(dest) { return __awaiter(this, void 0, void 0, function* () { if (!dest) { // create a temp dir - dest = path.join(tempDirectory, uuidV4()); + dest = path.join(_getTempDirectory(), v4_1.default()); } yield io.mkdirP(dest); return dest; @@ -386,7 +524,7 @@ function _createExtractFolder(dest) { } function _createToolPath(tool, version, arch) { return __awaiter(this, void 0, void 0, function* () { - const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || ''); + const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); core.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io.rmRF(folderPath); @@ -396,7 +534,7 @@ function _createToolPath(tool, version, arch) { }); } function _completeToolPath(tool, version, arch) { - const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || ''); + const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); const markerPath = `${folderPath}.complete`; fs.writeFileSync(markerPath, ''); core.debug('finished caching tool'); @@ -433,4 +571,36 @@ function _evaluateVersions(versions, versionSpec) { } return version; } +/** + * Gets RUNNER_TOOL_CACHE + */ +function _getCacheDirectory() { + const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || ''; + assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined'); + return cacheDirectory; +} +/** + * Gets RUNNER_TEMP + */ +function _getTempDirectory() { + const tempDirectory = process.env['RUNNER_TEMP'] || ''; + assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); + return tempDirectory; +} +/** + * Gets a global variable + */ +function _getGlobal(key, defaultValue) { + /* eslint-disable @typescript-eslint/no-explicit-any */ + const value = global[key]; + /* eslint-enable @typescript-eslint/no-explicit-any */ + return value !== undefined ? value : defaultValue; +} +/** + * Returns an array of unique values. + * @param values Values to make unique. + */ +function _unique(values) { + return Array.from(new Set(values)); +} //# sourceMappingURL=tool-cache.js.map \ No newline at end of file diff --git a/node_modules/@actions/tool-cache/lib/tool-cache.js.map b/node_modules/@actions/tool-cache/lib/tool-cache.js.map index 0c4f30b..a0557ab 100644 --- a/node_modules/@actions/tool-cache/lib/tool-cache.js.map +++ b/node_modules/@actions/tool-cache/lib/tool-cache.js.map @@ -1 +1 @@ -{"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../src/tool-cache.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,sCAAqC;AACrC,kCAAiC;AACjC,yBAAwB;AACxB,yBAAwB;AACxB,6BAA4B;AAC5B,sDAAqD;AACrD,iCAAgC;AAChC,kCAAiC;AACjC,iDAA2C;AAE3C,mCAAyB;AAEzB,MAAa,SAAU,SAAQ,KAAK;IAClC,YAAqB,cAAkC;QACrD,KAAK,CAAC,6BAA6B,cAAc,EAAE,CAAC,CAAA;QADjC,mBAAc,GAAd,cAAc,CAAoB;QAErD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACnD,CAAC;CACF;AALD,8BAKC;AAED,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAC/C,MAAM,SAAS,GAAG,oBAAoB,CAAA;AAEtC,iHAAiH;AACjH,IAAI,aAAa,GAAW,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;AAC5D,IAAI,SAAS,GAAW,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAA;AAC9D,gEAAgE;AAChE,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,EAAE;IAChC,IAAI,YAAoB,CAAA;IACxB,IAAI,UAAU,EAAE;QACd,8CAA8C;QAC9C,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,MAAM,CAAA;KACpD;SAAM;QACL,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACjC,YAAY,GAAG,QAAQ,CAAA;SACxB;aAAM;YACL,YAAY,GAAG,OAAO,CAAA;SACvB;KACF;IACD,IAAI,CAAC,aAAa,EAAE;QAClB,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;KAC3D;IACD,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;KACxD;CACF;AAED;;;;;GAKG;AACH,SAAsB,YAAY,CAAC,GAAW;;QAC5C,wEAAwE;QACxE,OAAO,IAAI,OAAO,CAAS,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YACnD,IAAI;gBACF,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,EAAE;oBAC/C,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,CAAC;iBACd,CAAC,CAAA;gBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;gBAEnD,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;gBAC9B,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,CAAA;gBAChC,IAAI,CAAC,KAAK,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAA;gBAErC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oBAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,iBAAiB,CAAC,CAAA;iBACpE;gBAED,MAAM,QAAQ,GAA6B,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAE9D,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,KAAK,GAAG,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;oBACtD,IAAI,CAAC,KAAK,CACR,4BAA4B,GAAG,WAC7B,QAAQ,CAAC,OAAO,CAAC,UACnB,aAAa,QAAQ,CAAC,OAAO,CAAC,aAAa,GAAG,CAC/C,CAAA;oBACD,MAAM,GAAG,CAAA;iBACV;gBAED,MAAM,IAAI,GAA0B,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;gBAClE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAS,EAAE;oBACzB,IAAI;wBACF,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBAC1C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;4BACtB,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;4BAC/B,OAAO,CAAC,QAAQ,CAAC,CAAA;wBACnB,CAAC,CAAC,CAAA;qBACH;oBAAC,OAAO,GAAG,EAAE;wBACZ,IAAI,CAAC,KAAK,CACR,4BAA4B,GAAG,WAC7B,QAAQ,CAAC,OAAO,CAAC,UACnB,aAAa,QAAQ,CAAC,OAAO,CAAC,aAAa,GAAG,CAC/C,CAAA;wBACD,MAAM,CAAC,GAAG,CAAC,CAAA;qBACZ;gBACH,CAAC,CAAA,CAAC,CAAA;gBACF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;oBACrB,IAAI,CAAC,GAAG,EAAE,CAAA;oBACV,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC,CAAC,CAAA;aACH;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,CAAC,GAAG,CAAC,CAAA;aACZ;QACH,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC;CAAA;AAvDD,oCAuDC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAsB,SAAS,CAC7B,IAAY,EACZ,IAAa,EACb,OAAgB;;QAEhB,WAAE,CAAC,UAAU,EAAE,yCAAyC,CAAC,CAAA;QACzD,WAAE,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAA;QAExC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;QAEjD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,IAAI,OAAO,EAAE;YACX,IAAI;gBACF,MAAM,IAAI,GAAa;oBACrB,GAAG;oBACH,MAAM;oBACN,KAAK;oBACL,WAAW;oBACX,IAAI;iBACL,CAAA;gBACD,MAAM,OAAO,GAAgB;oBAC3B,MAAM,EAAE,IAAI;iBACb,CAAA;gBACD,MAAM,WAAI,CAAC,IAAI,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;aAC1C;oBAAS;gBACR,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;aAC3B;SACF;aAAM;YACL,MAAM,aAAa,GAAG,IAAI;iBACvB,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,CAAC;iBACpD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;iBACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA,CAAC,6DAA6D;YACxF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YACpE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YACtE,MAAM,OAAO,GAAG,MAAM,aAAa,cAAc,WAAW,cAAc,aAAa,GAAG,CAAA;YAC1F,MAAM,IAAI,GAAa;gBACrB,SAAS;gBACT,MAAM;gBACN,YAAY;gBACZ,iBAAiB;gBACjB,kBAAkB;gBAClB,cAAc;gBACd,UAAU;gBACV,OAAO;aACR,CAAA;YACD,MAAM,OAAO,GAAgB;gBAC3B,MAAM,EAAE,IAAI;aACb,CAAA;YACD,IAAI;gBACF,MAAM,cAAc,GAAW,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;gBACjE,MAAM,WAAI,CAAC,IAAI,cAAc,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;aACjD;oBAAS;gBACR,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;aAC3B;SACF;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AA1DD,8BA0DC;AAED;;;;;;GAMG;AACH,SAAsB,UAAU,CAAC,IAAY,EAAE,IAAa;;QAC1D,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;SAChD;QAED,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;QACjD,MAAM,OAAO,GAAW,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACnD,MAAM,WAAI,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAErD,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAVD,gCAUC;AAED;;;;;;GAMG;AACH,SAAsB,UAAU,CAAC,IAAY,EAAE,IAAa;;QAC1D,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;SAChD;QAED,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;QAEjD,IAAI,UAAU,EAAE;YACd,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SAChC;aAAM;YACL,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SAChC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAdD,gCAcC;AAED,SAAe,aAAa,CAAC,IAAY,EAAE,IAAY;;QACrD,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA,CAAC,6DAA6D;QAClI,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,sKAAsK,WAAW,OAAO,WAAW,IAAI,CAAA;QAEvN,iBAAiB;QACjB,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QACnD,MAAM,IAAI,GAAG;YACX,SAAS;YACT,MAAM;YACN,YAAY;YACZ,iBAAiB;YACjB,kBAAkB;YAClB,cAAc;YACd,UAAU;YACV,OAAO;SACR,CAAA;QACD,MAAM,WAAI,CAAC,IAAI,cAAc,GAAG,EAAE,IAAI,CAAC,CAAA;IACzC,CAAC;CAAA;AAED,SAAe,aAAa,CAAC,IAAY,EAAE,IAAY;;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;QAC7E,MAAM,WAAI,CAAC,IAAI,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC,CAAA;IACnD,CAAC;CAAA;AAED;;;;;;;GAOG;AACH,SAAsB,QAAQ,CAC5B,SAAiB,EACjB,IAAY,EACZ,OAAe,EACf,IAAa;;QAEb,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,CAAA;QAC1C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC,CAAA;QAErD,IAAI,CAAC,KAAK,CAAC,eAAe,SAAS,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;SAChD;QAED,sBAAsB;QACtB,MAAM,QAAQ,GAAW,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QACnE,8DAA8D;QAC9D,8DAA8D;QAC9D,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;YAChD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACxC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;SAC5C;QAED,kBAAkB;QAClB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAEtC,OAAO,QAAQ,CAAA;IACjB,CAAC;CAAA;AA5BD,4BA4BC;AAED;;;;;;;;;GASG;AACH,SAAsB,SAAS,CAC7B,UAAkB,EAClB,UAAkB,EAClB,IAAY,EACZ,OAAe,EACf,IAAa;;QAEb,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,CAAA;QAC1C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC,CAAA;QAErD,IAAI,CAAC,KAAK,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;SAC5C;QAED,sBAAsB;QACtB,MAAM,UAAU,GAAW,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAErE,wDAAwD;QACxD,uDAAuD;QACvD,MAAM,QAAQ,GAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QAC1D,IAAI,CAAC,KAAK,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAA;QAC1C,MAAM,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAEjC,kBAAkB;QAClB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAEtC,OAAO,UAAU,CAAA;IACnB,CAAC;CAAA;AA7BD,8BA6BC;AAED;;;;;;GAMG;AACH,SAAgB,IAAI,CAClB,QAAgB,EAChB,WAAmB,EACnB,IAAa;IAEb,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;KAClD;IAED,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;KACrD;IAED,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;IAExB,yCAAyC;IACzC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE;QACpC,MAAM,aAAa,GAAa,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC/D,MAAM,KAAK,GAAG,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QAC3D,WAAW,GAAG,KAAK,CAAA;KACpB;IAED,8CAA8C;IAC9C,IAAI,QAAQ,GAAG,EAAE,CAAA;IACjB,IAAI,WAAW,EAAE;QACf,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;QACnE,IAAI,CAAC,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAA;QAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,SAAS,WAAW,CAAC,EAAE;YACtE,IAAI,CAAC,KAAK,CAAC,uBAAuB,QAAQ,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC,CAAA;YACpE,QAAQ,GAAG,SAAS,CAAA;SACrB;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;SACxB;KACF;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AApCD,oBAoCC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,QAAgB,EAAE,IAAa;IAC7D,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAE/C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC3B,MAAM,QAAQ,GAAa,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QACnD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;YAC5B,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;gBACvD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,QAAQ,WAAW,CAAC,EAAE;oBACpE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;iBACrB;aACF;SACF;KACF;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAnBD,0CAmBC;AAED,SAAe,oBAAoB,CAAC,IAAa;;QAC/C,IAAI,CAAC,IAAI,EAAE;YACT,oBAAoB;YACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;SAC1C;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAED,SAAe,eAAe,CAC5B,IAAY,EACZ,OAAe,EACf,IAAa;;QAEb,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,SAAS,EACT,IAAI,EACJ,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,EAChC,IAAI,IAAI,EAAE,CACX,CAAA;QACD,IAAI,CAAC,KAAK,CAAC,eAAe,UAAU,EAAE,CAAC,CAAA;QACvC,MAAM,UAAU,GAAG,GAAG,UAAU,WAAW,CAAA;QAC3C,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzB,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzB,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAC3B,OAAO,UAAU,CAAA;IACnB,CAAC;CAAA;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,OAAe,EAAE,IAAa;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,SAAS,EACT,IAAI,EACJ,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,EAChC,IAAI,IAAI,EAAE,CACX,CAAA;IACD,MAAM,UAAU,GAAG,GAAG,UAAU,WAAW,CAAA;IAC3C,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAChC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;AACrC,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;IACzC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAE9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IACrC,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,EAAE,CAAC,CAAA;IAEhC,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB,EAAE,WAAmB;IAChE,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,CAAC,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAA;IACpD,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACnB,OAAO,CAAC,CAAA;SACT;QACD,OAAO,CAAC,CAAC,CAAA;IACX,CAAC,CAAC,CAAA;IACF,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAW,QAAQ,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,SAAS,GAAY,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACnE,IAAI,SAAS,EAAE;YACb,OAAO,GAAG,SAAS,CAAA;YACnB,MAAK;SACN;KACF;IAED,IAAI,OAAO,EAAE;QACX,IAAI,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAA;KAClC;SAAM;QACL,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;KAC9B;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"} \ No newline at end of file +{"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../src/tool-cache.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@actions/tool-cache/package.json b/node_modules/@actions/tool-cache/package.json index bd09244..aaf318c 100644 --- a/node_modules/@actions/tool-cache/package.json +++ b/node_modules/@actions/tool-cache/package.json @@ -1,48 +1,16 @@ { - "_from": "@actions/tool-cache@^1.0.0", - "_id": "@actions/tool-cache@1.0.0", - "_inBundle": false, - "_integrity": "sha512-l3zT0IfDfi5Ik5aMpnXqGHGATxN8xa9ls4ue+X/CBXpPhRMRZS4vcuh5Q9T98WAGbkysRCfhpbksTPHIcKnNwQ==", - "_location": "/@actions/tool-cache", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "@actions/tool-cache@^1.0.0", - "name": "@actions/tool-cache", - "escapedName": "@actions%2ftool-cache", - "scope": "@actions", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/" - ], - "_resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.0.0.tgz", - "_shasum": "a9ac414bd2e0bf1f5f0302f029193c418d344c09", - "_spec": "@actions/tool-cache@^1.0.0", - "_where": "C:\\Users\\damccorm\\Documents\\setup-go", - "bugs": { - "url": "https://github.com/actions/toolkit/issues" - }, - "bundleDependencies": false, - "dependencies": { - "@actions/core": "^1.0.0", - "@actions/exec": "^1.0.0", - "@actions/io": "^1.0.0", - "semver": "^6.1.0", - "typed-rest-client": "^1.4.0", - "uuid": "^3.3.2" - }, - "deprecated": false, + "name": "@actions/tool-cache", + "version": "1.6.1", "description": "Actions tool-cache lib", - "devDependencies": { - "@types/nock": "^10.0.3", - "@types/semver": "^6.0.0", - "@types/uuid": "^3.4.4", - "nock": "^10.0.6" - }, + "keywords": [ + "github", + "actions", + "exec" + ], + "homepage": "https://github.com/actions/toolkit/tree/main/packages/tool-cache", + "license": "MIT", + "main": "lib/tool-cache.js", + "types": "lib/tool-cache.d.ts", "directories": { "lib": "lib", "test": "__tests__" @@ -51,25 +19,34 @@ "lib", "scripts" ], - "gitHead": "a40bce7c8d382aa3dbadaa327acbc696e9390e55", - "homepage": "https://github.com/actions/toolkit/tree/master/packages/exec", - "keywords": [ - "exec", - "actions" - ], - "license": "MIT", - "main": "lib/tool-cache.js", - "name": "@actions/tool-cache", "publishConfig": { "access": "public" }, "repository": { "type": "git", - "url": "git+https://github.com/actions/toolkit.git" + "url": "git+https://github.com/actions/toolkit.git", + "directory": "packages/tool-cache" }, "scripts": { + "audit-moderate": "npm install && npm audit --json --audit-level=moderate > audit.json", "test": "echo \"Error: run tests from root\" && exit 1", "tsc": "tsc" }, - "version": "1.0.0" + "bugs": { + "url": "https://github.com/actions/toolkit/issues" + }, + "dependencies": { + "@actions/core": "^1.2.6", + "@actions/exec": "^1.0.0", + "@actions/http-client": "^1.0.8", + "@actions/io": "^1.0.1", + "semver": "^6.1.0", + "uuid": "^3.3.2" + }, + "devDependencies": { + "@types/nock": "^10.0.3", + "@types/semver": "^6.0.0", + "@types/uuid": "^3.4.4", + "nock": "^10.0.6" + } } diff --git a/node_modules/@actions/tool-cache/scripts/externals/unzip b/node_modules/@actions/tool-cache/scripts/externals/unzip deleted file mode 100644 index 40824180954830c745c837044f339897f12dcab0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174216 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 VUgdd9+MdYxE~`IPR-o)Q_#X!!hD-ne diff --git a/node_modules/tunnel/.npmignore b/node_modules/tunnel/.npmignore deleted file mode 100644 index 6684c76..0000000 --- a/node_modules/tunnel/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/.idea -/node_modules diff --git a/node_modules/tunnel/.travis.yml b/node_modules/tunnel/.travis.yml new file mode 100644 index 0000000..cb6e182 --- /dev/null +++ b/node_modules/tunnel/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +node_js: + - "4" + - "6" + - "8" + - "10" diff --git a/node_modules/tunnel/CHANGELOG.md b/node_modules/tunnel/CHANGELOG.md index 70bdbd7..baf6b18 100644 --- a/node_modules/tunnel/CHANGELOG.md +++ b/node_modules/tunnel/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog + - 0.0.6 (2018/09/11) + - Fix `localAddress` not working (#25) + - Fix `Host:` header for CONNECT method by @tmurakam (#29, #30) + - Fix default port for https (#32) + - Fix error handling when the proxy send illegal response body (#33) + + - 0.0.5 (2017/06/12) + - Fix socket leak. + - 0.0.4 (2016/01/23) - supported Node v0.12 or later. diff --git a/node_modules/tunnel/README.md b/node_modules/tunnel/README.md index b196162..f54bca5 100644 --- a/node_modules/tunnel/README.md +++ b/node_modules/tunnel/README.md @@ -1,5 +1,9 @@ # node-tunnel - HTTP/HTTPS Agents for tunneling proxies +[![Build Status](https://img.shields.io/travis/koichik/node-tunnel.svg?style=flat)](https://travis-ci.org/koichik/node-tunnel) +[![Dependency Status](http://img.shields.io/david/koichik/node-tunnel.svg?style=flat)](https://david-dm.org/koichik/node-tunnel#info=dependencies) +[![DevDependency Status](http://img.shields.io/david/dev/koichik/node-tunnel.svg?style=flat)](https://david-dm.org/koichik/node-tunnel#info=devDependencies) + ## Example ```javascript @@ -29,7 +33,7 @@ var req = https.request({ ```javascript var tunnelingAgent = tunnel.httpOverHttp({ - maxSockets: poolSize, // Defaults to 5 + maxSockets: poolSize, // Defaults to http.Agent.defaultMaxSockets proxy: { // Proxy settings host: proxyHost, // Defaults to 'localhost' @@ -57,7 +61,7 @@ var req = http.request({ ```javascript var tunnelingAgent = tunnel.httpsOverHttp({ - maxSockets: poolSize, // Defaults to 5 + maxSockets: poolSize, // Defaults to http.Agent.defaultMaxSockets // CA for origin server if necessary ca: [ fs.readFileSync('origin-server-ca.pem')], @@ -92,7 +96,7 @@ var req = https.request({ ```javascript var tunnelingAgent = tunnel.httpOverHttps({ - maxSockets: poolSize, // Defaults to 5 + maxSockets: poolSize, // Defaults to http.Agent.defaultMaxSockets proxy: { // Proxy settings host: proxyHost, // Defaults to 'localhost' @@ -130,7 +134,7 @@ var req = http.request({ ```javascript var tunnelingAgent = tunnel.httpsOverHttps({ - maxSockets: poolSize, // Defaults to 5 + maxSockets: poolSize, // Defaults to http.Agent.defaultMaxSockets // CA for origin server if necessary ca: [ fs.readFileSync('origin-server-ca.pem')], @@ -173,6 +177,8 @@ var req = https.request({ ## CONTRIBUTORS * [Aleksis Brezas (abresas)](https://github.com/abresas) +* [Jackson Tian (JacksonTian)](https://github.com/JacksonTian) +* [Dmitry Sorin (1999)](https://github.com/1999) ## License diff --git a/node_modules/tunnel/lib/tunnel.js b/node_modules/tunnel/lib/tunnel.js index c42b039..10cc382 100644 --- a/node_modules/tunnel/lib/tunnel.js +++ b/node_modules/tunnel/lib/tunnel.js @@ -25,6 +25,7 @@ function httpsOverHttp(options) { var agent = new TunnelingAgent(options); agent.request = http.request; agent.createSocket = createSecureSocket; + agent.defaultPort = 443; return agent; } @@ -38,6 +39,7 @@ function httpsOverHttps(options) { var agent = new TunnelingAgent(options); agent.request = https.request; agent.createSocket = createSecureSocket; + agent.defaultPort = 443; return agent; } @@ -106,8 +108,14 @@ TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { var connectOptions = mergeOptions({}, self.proxyOptions, { method: 'CONNECT', path: options.host + ':' + options.port, - agent: false + agent: false, + headers: { + host: options.host + ':' + options.port + } }); + if (options.localAddress) { + connectOptions.localAddress = options.localAddress; + } if (connectOptions.proxyAuth) { connectOptions.headers = connectOptions.headers || {}; connectOptions.headers['Proxy-Authorization'] = 'Basic ' + @@ -139,20 +147,29 @@ TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { connectReq.removeAllListeners(); socket.removeAllListeners(); - if (res.statusCode === 200) { - assert.equal(head.length, 0); - debug('tunneling connection has established'); - self.sockets[self.sockets.indexOf(placeholder)] = socket; - cb(socket); - } else { + if (res.statusCode !== 200) { debug('tunneling socket could not be established, statusCode=%d', - res.statusCode); + res.statusCode); + socket.destroy(); var error = new Error('tunneling socket could not be established, ' + - 'statusCode=' + res.statusCode); + 'statusCode=' + res.statusCode); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + return; + } + if (head.length > 0) { + debug('got illegal response body from proxy'); + socket.destroy(); + var error = new Error('got illegal response body from proxy'); error.code = 'ECONNRESET'; options.request.emit('error', error); self.removeSocket(placeholder); + return; } + debug('tunneling connection has established'); + self.sockets[self.sockets.indexOf(placeholder)] = socket; + return cb(socket); } function onError(cause) { diff --git a/node_modules/tunnel/package.json b/node_modules/tunnel/package.json index 0f69f5b..bcd7b95 100644 --- a/node_modules/tunnel/package.json +++ b/node_modules/tunnel/package.json @@ -1,48 +1,7 @@ { - "_from": "tunnel@0.0.4", - "_id": "tunnel@0.0.4", - "_inBundle": false, - "_integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=", - "_location": "/tunnel", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "tunnel@0.0.4", - "name": "tunnel", - "escapedName": "tunnel", - "rawSpec": "0.0.4", - "saveSpec": null, - "fetchSpec": "0.0.4" - }, - "_requiredBy": [ - "/typed-rest-client" - ], - "_resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", - "_shasum": "2d3785a158c174c9a16dc2c046ec5fc5f1742213", - "_spec": "tunnel@0.0.4", - "_where": "C:\\Users\\damccorm\\Documents\\setup-go\\node_modules\\typed-rest-client", - "author": { - "name": "Koichi Kobayashi", - "email": "koichik@improvement.jp" - }, - "bugs": { - "url": "https://github.com/koichik/node-tunnel/issues" - }, - "bundleDependencies": false, - "deprecated": false, + "name": "tunnel", + "version": "0.0.6", "description": "Node HTTP/HTTPS Agents for tunneling proxies", - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "directories": { - "lib": "./lib" - }, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - }, - "homepage": "https://github.com/koichik/node-tunnel/", "keywords": [ "http", "https", @@ -50,15 +9,26 @@ "proxy", "tunnel" ], + "homepage": "https://github.com/koichik/node-tunnel/", + "bugs": "https://github.com/koichik/node-tunnel/issues", "license": "MIT", + "author": "Koichi Kobayashi ", "main": "./index.js", - "name": "tunnel", + "directories": { + "lib": "./lib" + }, "repository": { "type": "git", - "url": "git+https://github.com/koichik/node-tunnel.git" + "url": "https://github.com/koichik/node-tunnel.git" }, "scripts": { - "test": "./node_modules/mocha/bin/mocha" + "test": "mocha" + }, + "devDependencies": { + "mocha": "^5.2.0", + "should": "^13.2.3" }, - "version": "0.0.4" + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } } diff --git a/node_modules/tunnel/test/http-over-http.js b/node_modules/tunnel/test/http-over-http.js deleted file mode 100644 index 73d17a2..0000000 --- a/node_modules/tunnel/test/http-over-http.js +++ /dev/null @@ -1,108 +0,0 @@ -var http = require('http'); -var net = require('net'); -var should = require('should'); -var tunnel = require('../index'); - -describe('HTTP over HTTP', function() { - it('should finish without error', function(done) { - var serverPort = 3000; - var proxyPort = 3001; - var poolSize = 3; - var N = 10; - var serverConnect = 0; - var proxyConnect = 0; - var clientConnect = 0; - var server; - var proxy; - var agent; - - server = http.createServer(function(req, res) { - tunnel.debug('SERVER: got request'); - ++serverConnect; - res.writeHead(200); - res.end('Hello' + req.url); - tunnel.debug('SERVER: sending response'); - }); - server.listen(serverPort, setupProxy); - - function setupProxy() { - proxy = http.createServer(function(req, res) { - should.fail(); - }); - proxy.on('upgrade', onConnect); // for v0.6 - proxy.on('connect', onConnect); // for v0.7 or later - - function onConnect(req, clientSocket, head) { - tunnel.debug('PROXY: got CONNECT request'); - - req.method.should.equal('CONNECT'); - req.url.should.equal('localhost:' + serverPort); - req.headers.should.not.have.property('transfer-encoding'); - req.headers.should.have.property('proxy-authorization', - 'Basic ' + new Buffer('user:password').toString('base64')); - ++proxyConnect; - - tunnel.debug('PROXY: creating a tunnel'); - var serverSocket = net.connect(serverPort, function() { - tunnel.debug('PROXY: replying to client CONNECT request'); - clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n'); - clientSocket.pipe(serverSocket); - serverSocket.write(head); - serverSocket.pipe(clientSocket); - // workaround, see joyent/node#2524 - serverSocket.on('end', function() { - clientSocket.end(); - }); - }); - } - proxy.listen(proxyPort, setupClient); - } - - function setupClient() { - agent = tunnel.httpOverHttp({ - maxSockets: poolSize, - proxy: { - port: proxyPort, - proxyAuth: 'user:password' - } - }); - - for (var i = 0; i < N; ++i) { - doClientRequest(i); - } - - function doClientRequest(i) { - tunnel.debug('CLIENT: Making HTTP request (%d)', i); - var req = http.get({ - port: serverPort, - path: '/' + i, - agent: agent - }, function(res) { - tunnel.debug('CLIENT: got HTTP response (%d)', i); - res.setEncoding('utf8'); - res.on('data', function(data) { - data.should.equal('Hello/' + i); - }); - res.on('end', function() { - ++clientConnect; - if (clientConnect === N) { - proxy.close(); - server.close(); - } - }); - }); - } - } - - server.on('close', function() { - serverConnect.should.equal(N); - proxyConnect.should.equal(poolSize); - clientConnect.should.equal(N); - - agent.sockets.should.be.empty; - agent.requests.should.be.empty; - - done(); - }); - }); -}); diff --git a/node_modules/tunnel/test/http-over-https.js b/node_modules/tunnel/test/http-over-https.js deleted file mode 100644 index c3a92fd..0000000 --- a/node_modules/tunnel/test/http-over-https.js +++ /dev/null @@ -1,130 +0,0 @@ -var http = require('http'); -var https = require('https'); -var net = require('net'); -var fs = require('fs'); -var path = require('path'); -var should = require('should'); -var tunnel = require('../index'); - -function readPem(file) { - return fs.readFileSync(path.join('test/keys', file + '.pem')); -} - -var proxyKey = readPem('proxy1-key'); -var proxyCert = readPem('proxy1-cert'); -var proxyCA = readPem('ca2-cert'); -var clientKey = readPem('client1-key'); -var clientCert = readPem('client1-cert'); -var clientCA = readPem('ca3-cert'); - -describe('HTTP over HTTPS', function() { - it('should finish without error', function(done) { - var serverPort = 3004; - var proxyPort = 3005; - var poolSize = 3; - var N = 10; - var serverConnect = 0; - var proxyConnect = 0; - var clientConnect = 0; - var server; - var proxy; - var agent; - - server = http.createServer(function(req, res) { - tunnel.debug('SERVER: got request'); - ++serverConnect; - res.writeHead(200); - res.end('Hello' + req.url); - tunnel.debug('SERVER: sending response'); - }); - server.listen(serverPort, setupProxy); - - function setupProxy() { - proxy = https.createServer({ - key: proxyKey, - cert: proxyCert, - ca: [clientCA], - requestCert: true, - rejectUnauthorized: true - }, function(req, res) { - should.fail(); - }); - proxy.on('upgrade', onConnect); // for v0.6 - proxy.on('connect', onConnect); // for v0.7 or later - - function onConnect(req, clientSocket, head) { - tunnel.debug('PROXY: got CONNECT request'); - - req.method.should.equal('CONNECT'); - req.url.should.equal('localhost:' + serverPort); - req.headers.should.not.have.property('transfer-encoding'); - ++proxyConnect; - - tunnel.debug('PROXY: creating a tunnel'); - var serverSocket = net.connect(serverPort, function() { - tunnel.debug('PROXY: replying to client CONNECT request'); - clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n'); - clientSocket.pipe(serverSocket); - serverSocket.write(head); - serverSocket.pipe(clientSocket); - // workaround, see joyent/node#2524 - serverSocket.on('end', function() { - clientSocket.end(); - }); - }); - } - proxy.listen(proxyPort, setupClient); - } - - function setupClient() { - agent = tunnel.httpOverHttps({ - maxSockets: poolSize, - proxy: { - port: proxyPort, - key: clientKey, - cert: clientCert, - ca: [proxyCA], - rejectUnauthorized: true - } - }); - - for (var i = 0; i < N; ++i) { - doClientRequest(i); - } - - function doClientRequest(i) { - tunnel.debug('CLIENT: Making HTTP request (%d)', i); - var req = http.get({ - port: serverPort, - path: '/' + i, - agent: agent - }, function(res) { - tunnel.debug('CLIENT: got HTTP response (%d)', i); - res.setEncoding('utf8'); - res.on('data', function(data) { - data.should.equal('Hello/' + i); - }); - res.on('end', function() { - ++clientConnect; - if (clientConnect === N) { - proxy.close(); - server.close(); - } - }); - }); - } - } - - server.on('close', function() { - serverConnect.should.equal(N); - proxyConnect.should.equal(poolSize); - clientConnect.should.equal(N); - - var name = 'localhost:' + serverPort; - agent.sockets.should.be.empty; - agent.requests.should.be.empty; - - done(); - }); - }); -}); diff --git a/node_modules/tunnel/test/https-over-http.js b/node_modules/tunnel/test/https-over-http.js deleted file mode 100644 index 82c4772..0000000 --- a/node_modules/tunnel/test/https-over-http.js +++ /dev/null @@ -1,130 +0,0 @@ -var http = require('http'); -var https = require('https'); -var net = require('net'); -var fs = require('fs'); -var path = require('path'); -var should = require('should'); -var tunnel = require('../index'); - -function readPem(file) { - return fs.readFileSync(path.join('test/keys', file + '.pem')); -} - -var serverKey = readPem('server1-key'); -var serverCert = readPem('server1-cert'); -var serverCA = readPem('ca1-cert'); -var clientKey = readPem('client1-key'); -var clientCert = readPem('client1-cert'); -var clientCA = readPem('ca3-cert'); - - -describe('HTTPS over HTTP', function() { - it('should finish without error', function(done) { - var serverPort = 3002; - var proxyPort = 3003; - var poolSize = 3; - var N = 10; - var serverConnect = 0; - var proxyConnect = 0; - var clientConnect = 0; - var server; - var proxy; - var agent; - - server = https.createServer({ - key: serverKey, - cert: serverCert, - ca: [clientCA], - requestCert: true, - rejectUnauthorized: true - }, function(req, res) { - tunnel.debug('SERVER: got request'); - ++serverConnect; - res.writeHead(200); - res.end('Hello' + req.url); - tunnel.debug('SERVER: sending response'); - }); - server.listen(serverPort, setupProxy); - - function setupProxy() { - proxy = http.createServer(function(req, res) { - should.fail(); - }); - proxy.on('upgrade', onConnect); // for v0.6 - proxy.on('connect', onConnect); // for v0.7 or later - - function onConnect(req, clientSocket, head) { - tunnel.debug('PROXY: got CONNECT request'); - - req.method.should.equal('CONNECT'); - req.url.should.equal('localhost:' + serverPort); - req.headers.should.not.have.property('transfer-encoding'); - ++proxyConnect; - - var serverSocket = net.connect(serverPort, function() { - tunnel.debug('PROXY: replying to client CONNECT request'); - clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n'); - clientSocket.pipe(serverSocket); - serverSocket.write(head); - serverSocket.pipe(clientSocket); - // workaround, see joyent/node#2524 - serverSocket.on('end', function() { - clientSocket.end(); - }); - }); - } - proxy.listen(proxyPort, setupClient); - } - - function setupClient() { - agent = tunnel.httpsOverHttp({ - maxSockets: poolSize, - key: clientKey, - cert: clientCert, - ca: [serverCA], - rejectUnauthorized: true, - proxy: { - port: proxyPort - } - }); - - for (var i = 0; i < N; ++i) { - doClientRequest(i); - } - - function doClientRequest(i) { - tunnel.debug('CLIENT: Making HTTPS request (%d)', i); - var req = https.get({ - port: serverPort, - path: '/' + i, - agent: agent - }, function(res) { - tunnel.debug('CLIENT: got HTTPS response (%d)', i); - res.setEncoding('utf8'); - res.on('data', function(data) { - data.should.equal('Hello/' + i); - }); - res.on('end', function() { - ++clientConnect; - if (clientConnect === N) { - proxy.close(); - server.close(); - } - }); - }); - } - } - - server.on('close', function() { - serverConnect.should.equal(N); - proxyConnect.should.equal(poolSize); - clientConnect.should.equal(N); - - var name = 'localhost:' + serverPort; - agent.sockets.should.be.empty; - agent.requests.should.be.empty; - - done(); - }); - }); -}); diff --git a/node_modules/tunnel/test/https-over-https-error.js b/node_modules/tunnel/test/https-over-https-error.js deleted file mode 100644 index c74094d..0000000 --- a/node_modules/tunnel/test/https-over-https-error.js +++ /dev/null @@ -1,261 +0,0 @@ -var http = require('http'); -var https = require('https'); -var net = require('net'); -var fs = require('fs'); -var path = require('path'); -var should = require('should'); -var tunnel = require('../index'); - -function readPem(file) { - return fs.readFileSync(path.join('test/keys', file + '.pem')); -} - -var serverKey = readPem('server2-key'); -var serverCert = readPem('server2-cert'); -var serverCA = readPem('ca1-cert'); -var proxyKey = readPem('proxy2-key'); -var proxyCert = readPem('proxy2-cert'); -var proxyCA = readPem('ca2-cert'); -var client1Key = readPem('client1-key'); -var client1Cert = readPem('client1-cert'); -var client1CA = readPem('ca3-cert'); -var client2Key = readPem('client2-key'); -var client2Cert = readPem('client2-cert'); -var client2CA = readPem('ca4-cert'); - -describe('HTTPS over HTTPS authentication failed', function() { - it('should finish without error', function(done) { - var serverPort = 3008; - var proxyPort = 3009; - var serverConnect = 0; - var proxyConnect = 0; - var clientRequest = 0; - var clientConnect = 0; - var clientError = 0; - var server; - var proxy; - - server = https.createServer({ - key: serverKey, - cert: serverCert, - ca: [client1CA], - requestCert: true, - rejectUnauthorized: true - }, function(req, res) { - tunnel.debug('SERVER: got request', req.url); - ++serverConnect; - req.on('data', function(data) { - }); - req.on('end', function() { - res.writeHead(200); - res.end('Hello, ' + serverConnect); - tunnel.debug('SERVER: sending response'); - }); - req.resume(); - }); - //server.addContext('server2', { - // key: serverKey, - // cert: serverCert, - // ca: [client1CA], - //}); - server.listen(serverPort, setupProxy); - - function setupProxy() { - proxy = https.createServer({ - key: proxyKey, - cert: proxyCert, - ca: [client2CA], - requestCert: true, - rejectUnauthorized: true - }, function(req, res) { - should.fail(); - }); - //proxy.addContext('proxy2', { - // key: proxyKey, - // cert: proxyCert, - // ca: [client2CA], - //}); - proxy.on('upgrade', onConnect); // for v0.6 - proxy.on('connect', onConnect); // for v0.7 or later - - function onConnect(req, clientSocket, head) { - req.method.should.equal('CONNECT'); - req.url.should.equal('localhost:' + serverPort); - req.headers.should.not.have.property('transfer-encoding'); - ++proxyConnect; - - var serverSocket = net.connect(serverPort, function() { - tunnel.debug('PROXY: replying to client CONNECT request'); - clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n'); - clientSocket.pipe(serverSocket); - serverSocket.write(head); - serverSocket.pipe(clientSocket); - // workaround, see #2524 - serverSocket.on('end', function() { - clientSocket.end(); - }); - }); - } - proxy.listen(proxyPort, setupClient); - } - - function setupClient() { - function doRequest(name, options, host) { - tunnel.debug('CLIENT: Making HTTPS request (%s)', name); - ++clientRequest; - var agent = tunnel.httpsOverHttps(options); - var req = https.get({ - host: 'localhost', - port: serverPort, - path: '/' + encodeURIComponent(name), - headers: { - host: host ? host : 'localhost', - }, - rejectUnauthorized: true, - agent: agent - }, function(res) { - tunnel.debug('CLIENT: got HTTPS response (%s)', name); - ++clientConnect; - res.on('data', function(data) { - }); - res.on('end', function() { - req.emit('finish'); - }); - res.resume(); - }); - req.on('error', function(err) { - tunnel.debug('CLIENT: failed HTTP response (%s)', name, err); - ++clientError; - req.emit('finish'); - }); - req.on('finish', function() { - if (clientConnect + clientError === clientRequest) { - proxy.close(); - server.close(); - } - }); - } - - doRequest('no cert origin nor proxy', { // invalid - maxSockets: 1, - ca: [serverCA], - rejectUnauthorized: true, - // no certificate for origin server - proxy: { - port: proxyPort, - ca: [proxyCA], - rejectUnauthorized: true, - headers: { - host: 'proxy2' - } - // no certificate for proxy - } - }, 'server2'); - - doRequest('no cert proxy', { // invalid - maxSockets: 1, - ca: [serverCA], - rejectUnauthorized: true, - // client certification for origin server - key: client1Key, - cert: client1Cert, - proxy: { - port: proxyPort, - ca: [proxyCA], - rejectUnauthorized: true, - headers: { - host: 'proxy2' - } - // no certificate for proxy - } - }, 'server2'); - - doRequest('no cert origin', { // invalid - maxSockets: 1, - ca: [serverCA], - rejectUnauthorized: true, - // no certificate for origin server - proxy: { - port: proxyPort, - servername: 'proxy2', - ca: [proxyCA], - rejectUnauthorized: true, - headers: { - host: 'proxy2' - }, - // client certification for proxy - key: client2Key, - cert: client2Cert - } - }, 'server2'); - - doRequest('invalid proxy server name', { // invalid - maxSockets: 1, - ca: [serverCA], - rejectUnauthorized: true, - // client certification for origin server - key: client1Key, - cert: client1Cert, - proxy: { - port: proxyPort, - ca: [proxyCA], - rejectUnauthorized: true, - // client certification for proxy - key: client2Key, - cert: client2Cert, - } - }, 'server2'); - - doRequest('invalid origin server name', { // invalid - maxSockets: 1, - ca: [serverCA], - rejectUnauthorized: true, - // client certification for origin server - key: client1Key, - cert: client1Cert, - proxy: { - port: proxyPort, - servername: 'proxy2', - ca: [proxyCA], - rejectUnauthorized: true, - headers: { - host: 'proxy2' - }, - // client certification for proxy - key: client2Key, - cert: client2Cert - } - }); - - doRequest('valid', { // valid - maxSockets: 1, - ca: [serverCA], - rejectUnauthorized: true, - // client certification for origin server - key: client1Key, - cert: client1Cert, - proxy: { - port: proxyPort, - servername: 'proxy2', - ca: [proxyCA], - rejectUnauthorized: true, - headers: { - host: 'proxy2' - }, - // client certification for proxy - key: client2Key, - cert: client2Cert - } - }, 'server2'); - } - - server.on('close', function() { - serverConnect.should.equal(1); - proxyConnect.should.equal(3); - clientConnect.should.equal(1); - clientError.should.equal(5); - - done(); - }); - }); -}); diff --git a/node_modules/tunnel/test/https-over-https.js b/node_modules/tunnel/test/https-over-https.js deleted file mode 100644 index a9f81c8..0000000 --- a/node_modules/tunnel/test/https-over-https.js +++ /dev/null @@ -1,146 +0,0 @@ -var http = require('http'); -var https = require('https'); -var net = require('net'); -var fs = require('fs'); -var path = require('path'); -var should = require('should'); -var tunnel = require('../index.js'); - -function readPem(file) { - return fs.readFileSync(path.join('test/keys', file + '.pem')); -} - -var serverKey = readPem('server1-key'); -var serverCert = readPem('server1-cert'); -var serverCA = readPem('ca1-cert'); -var proxyKey = readPem('proxy1-key'); -var proxyCert = readPem('proxy1-cert'); -var proxyCA = readPem('ca2-cert'); -var client1Key = readPem('client1-key'); -var client1Cert = readPem('client1-cert'); -var client1CA = readPem('ca3-cert'); -var client2Key = readPem('client2-key'); -var client2Cert = readPem('client2-cert'); -var client2CA = readPem('ca4-cert'); - -describe('HTTPS over HTTPS', function() { - it('should finish without error', function(done) { - var serverPort = 3006; - var proxyPort = 3007; - var poolSize = 3; - var N = 5; - var serverConnect = 0; - var proxyConnect = 0; - var clientConnect = 0; - var server; - var proxy; - var agent; - - server = https.createServer({ - key: serverKey, - cert: serverCert, - ca: [client1CA], - requestCert: true, - rejectUnauthorized: true - }, function(req, res) { - tunnel.debug('SERVER: got request'); - ++serverConnect; - res.writeHead(200); - res.end('Hello' + req.url); - tunnel.debug('SERVER: sending response'); - }); - server.listen(serverPort, setupProxy); - - function setupProxy() { - proxy = https.createServer({ - key: proxyKey, - cert: proxyCert, - ca: [client2CA], - requestCert: true, - rejectUnauthorized: true - }, function(req, res) { - should.fail(); - }); - proxy.on('upgrade', onConnect); // for v0.6 - proxy.on('connect', onConnect); // for v0.7 or later - - function onConnect(req, clientSocket, head) { - tunnel.debug('PROXY: got CONNECT request'); - req.method.should.equal('CONNECT'); - req.url.should.equal('localhost:' + serverPort); - req.headers.should.not.have.property('transfer-encoding'); - ++proxyConnect; - - var serverSocket = net.connect(serverPort, function() { - tunnel.debug('PROXY: replying to client CONNECT request'); - clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n'); - clientSocket.pipe(serverSocket); - serverSocket.write(head); - serverSocket.pipe(clientSocket); - // workaround, see joyent/node#2524 - serverSocket.on('end', function() { - clientSocket.end(); - }); - }); - } - proxy.listen(proxyPort, setupClient); - } - - function setupClient() { - agent = tunnel.httpsOverHttps({ - maxSockets: poolSize, - // client certification for origin server - key: client1Key, - cert: client1Cert, - ca: [serverCA], - rejectUnauthroized: true, - proxy: { - port: proxyPort, - // client certification for proxy - key: client2Key, - cert: client2Cert, - ca: [proxyCA], - rejectUnauthroized: true - } - }); - - for (var i = 0; i < N; ++i) { - doClientRequest(i); - } - - function doClientRequest(i) { - tunnel.debug('CLIENT: Making HTTPS request (%d)', i); - var req = https.get({ - port: serverPort, - path: '/' + i, - agent: agent - }, function(res) { - tunnel.debug('CLIENT: got HTTPS response (%d)', i); - res.setEncoding('utf8'); - res.on('data', function(data) { - data.should.equal('Hello/' + i); - }); - res.on('end', function() { - ++clientConnect; - if (clientConnect === N) { - proxy.close(); - server.close(); - } - }); - }); - } - } - - server.on('close', function() { - serverConnect.should.equal(N); - proxyConnect.should.equal(poolSize); - clientConnect.should.equal(N); - - var name = 'localhost:' + serverPort; - agent.sockets.should.be.empty; - agent.requests.should.be.empty; - - done(); - }); - }); -}); diff --git a/node_modules/tunnel/test/keys/Makefile b/node_modules/tunnel/test/keys/Makefile deleted file mode 100644 index 6b4745b..0000000 --- a/node_modules/tunnel/test/keys/Makefile +++ /dev/null @@ -1,157 +0,0 @@ -all: server1-cert.pem server2-cert.pem proxy1-cert.pem proxy2-cert.pem client1-cert.pem client2-cert.pem - - -# -# Create Certificate Authority: ca1 -# ('password' is used for the CA password.) -# -ca1-cert.pem: ca1.cnf - openssl req -new -x509 -days 9999 -config ca1.cnf -keyout ca1-key.pem -out ca1-cert.pem - -# -# Create Certificate Authority: ca2 -# ('password' is used for the CA password.) -# -ca2-cert.pem: ca2.cnf - openssl req -new -x509 -days 9999 -config ca2.cnf -keyout ca2-key.pem -out ca2-cert.pem - -# -# Create Certificate Authority: ca3 -# ('password' is used for the CA password.) -# -ca3-cert.pem: ca3.cnf - openssl req -new -x509 -days 9999 -config ca3.cnf -keyout ca3-key.pem -out ca3-cert.pem - -# -# Create Certificate Authority: ca4 -# ('password' is used for the CA password.) -# -ca4-cert.pem: ca4.cnf - openssl req -new -x509 -days 9999 -config ca4.cnf -keyout ca4-key.pem -out ca4-cert.pem - - -# -# server1 is signed by ca1. -# -server1-key.pem: - openssl genrsa -out server1-key.pem 1024 - -server1-csr.pem: server1.cnf server1-key.pem - openssl req -new -config server1.cnf -key server1-key.pem -out server1-csr.pem - -server1-cert.pem: server1-csr.pem ca1-cert.pem ca1-key.pem - openssl x509 -req \ - -days 9999 \ - -passin "pass:password" \ - -in server1-csr.pem \ - -CA ca1-cert.pem \ - -CAkey ca1-key.pem \ - -CAcreateserial \ - -out server1-cert.pem - -# -# server2 is signed by ca1. -# -server2-key.pem: - openssl genrsa -out server2-key.pem 1024 - -server2-csr.pem: server2.cnf server2-key.pem - openssl req -new -config server2.cnf -key server2-key.pem -out server2-csr.pem - -server2-cert.pem: server2-csr.pem ca1-cert.pem ca1-key.pem - openssl x509 -req \ - -days 9999 \ - -passin "pass:password" \ - -in server2-csr.pem \ - -CA ca1-cert.pem \ - -CAkey ca1-key.pem \ - -CAcreateserial \ - -out server2-cert.pem - -server2-verify: server2-cert.pem ca1-cert.pem - openssl verify -CAfile ca1-cert.pem server2-cert.pem - -# -# proxy1 is signed by ca2. -# -proxy1-key.pem: - openssl genrsa -out proxy1-key.pem 1024 - -proxy1-csr.pem: proxy1.cnf proxy1-key.pem - openssl req -new -config proxy1.cnf -key proxy1-key.pem -out proxy1-csr.pem - -proxy1-cert.pem: proxy1-csr.pem ca2-cert.pem ca2-key.pem - openssl x509 -req \ - -days 9999 \ - -passin "pass:password" \ - -in proxy1-csr.pem \ - -CA ca2-cert.pem \ - -CAkey ca2-key.pem \ - -CAcreateserial \ - -out proxy1-cert.pem - -# -# proxy2 is signed by ca2. -# -proxy2-key.pem: - openssl genrsa -out proxy2-key.pem 1024 - -proxy2-csr.pem: proxy2.cnf proxy2-key.pem - openssl req -new -config proxy2.cnf -key proxy2-key.pem -out proxy2-csr.pem - -proxy2-cert.pem: proxy2-csr.pem ca2-cert.pem ca2-key.pem - openssl x509 -req \ - -days 9999 \ - -passin "pass:password" \ - -in proxy2-csr.pem \ - -CA ca2-cert.pem \ - -CAkey ca2-key.pem \ - -CAcreateserial \ - -out proxy2-cert.pem - -proxy2-verify: proxy2-cert.pem ca2-cert.pem - openssl verify -CAfile ca2-cert.pem proxy2-cert.pem - -# -# client1 is signed by ca3. -# -client1-key.pem: - openssl genrsa -out client1-key.pem 1024 - -client1-csr.pem: client1.cnf client1-key.pem - openssl req -new -config client1.cnf -key client1-key.pem -out client1-csr.pem - -client1-cert.pem: client1-csr.pem ca3-cert.pem ca3-key.pem - openssl x509 -req \ - -days 9999 \ - -passin "pass:password" \ - -in client1-csr.pem \ - -CA ca3-cert.pem \ - -CAkey ca3-key.pem \ - -CAcreateserial \ - -out client1-cert.pem - -# -# client2 is signed by ca4. -# -client2-key.pem: - openssl genrsa -out client2-key.pem 1024 - -client2-csr.pem: client2.cnf client2-key.pem - openssl req -new -config client2.cnf -key client2-key.pem -out client2-csr.pem - -client2-cert.pem: client2-csr.pem ca4-cert.pem ca4-key.pem - openssl x509 -req \ - -days 9999 \ - -passin "pass:password" \ - -in client2-csr.pem \ - -CA ca4-cert.pem \ - -CAkey ca4-key.pem \ - -CAcreateserial \ - -out client2-cert.pem - - -clean: - rm -f *.pem *.srl - -test: client-verify server2-verify proxy1-verify proxy2-verify client-verify diff --git a/node_modules/tunnel/test/keys/agent1-cert.pem b/node_modules/tunnel/test/keys/agent1-cert.pem deleted file mode 100644 index 816f6fb..0000000 --- a/node_modules/tunnel/test/keys/agent1-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICKjCCAZMCCQDQ8o4kHKdCPDANBgkqhkiG9w0BAQUFADB6MQswCQYDVQQGEwJV -UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO -BgNVBAsTB05vZGUuanMxDDAKBgNVBAMTA2NhMTEgMB4GCSqGSIb3DQEJARYRcnlA -dGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEyWjB9 -MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQK -EwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MTEgMB4G -CSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEFAANL -ADBIAkEAnzpAqcoXZxWJz/WFK7BXwD23jlREyG11x7gkydteHvn6PrVBbB5yfu6c -bk8w3/Ar608AcyMQ9vHjkLQKH7cjEQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAKha -HqjCfTIut+m/idKy3AoFh48tBHo3p9Nl5uBjQJmahKdZAaiksL24Pl+NzPQ8LIU+ -FyDHFp6OeJKN6HzZ72Bh9wpBVu6Uj1hwhZhincyTXT80wtSI/BoUAW8Ls2kwPdus -64LsJhhxqj2m4vPKNRbHB2QxnNrGi30CUf3kt3Ia ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/agent1-csr.pem b/node_modules/tunnel/test/keys/agent1-csr.pem deleted file mode 100644 index 748fd00..0000000 --- a/node_modules/tunnel/test/keys/agent1-csr.pem +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH -EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD -EwZhZ2VudDExIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ -KoZIhvcNAQEBBQADSwAwSAJBAJ86QKnKF2cVic/1hSuwV8A9t45URMhtdce4JMnb -Xh75+j61QWwecn7unG5PMN/wK+tPAHMjEPbx45C0Ch+3IxECAwEAAaAlMCMGCSqG -SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB -AF+AfG64hNyYHum46m6i7RgnUBrJSOynGjs23TekV4he3QdMSAAPPqbll8W14+y3 -vOo7/yQ2v2uTqxCjakUNPPs= ------END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/agent1-key.pem b/node_modules/tunnel/test/keys/agent1-key.pem deleted file mode 100644 index 5dae7eb..0000000 --- a/node_modules/tunnel/test/keys/agent1-key.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIBOwIBAAJBAJ86QKnKF2cVic/1hSuwV8A9t45URMhtdce4JMnbXh75+j61QWwe -cn7unG5PMN/wK+tPAHMjEPbx45C0Ch+3IxECAwEAAQJBAI2cU1IuR+4IO87WPyAB -76kruoo87AeNQkjjvuQ/00+b/6IS45mcEP5Kw0NukbqBhIw2di9uQ9J51DJ/ZfQr -+YECIQDUHaN3ZjIdJ7/w8Yq9Zzz+3kY2F/xEz6e4ftOFW8bY2QIhAMAref+WYckC -oECgOLAvAxB1lI4j7oCbAaawfxKdnPj5AiEAi95rXx09aGpAsBGmSdScrPdG1v6j -83/2ebrvoZ1uFqkCIB0AssnrRVjUB6GZTNTyU3ERfdkx/RX1zvr8WkFR/lXpAiB7 -cUZ1i8ZkZrPrdVgw2cb28UJM7qZHQnXcMHTXFFvxeQ== ------END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/agent1.cnf b/node_modules/tunnel/test/keys/agent1.cnf deleted file mode 100644 index 81d2f09..0000000 --- a/node_modules/tunnel/test/keys/agent1.cnf +++ /dev/null @@ -1,19 +0,0 @@ -[ req ] -default_bits = 1024 -days = 999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = US -ST = CA -L = SF -O = Joyent -OU = Node.js -CN = agent1 -emailAddress = ry@tinyclouds.org - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/agent2-cert.pem b/node_modules/tunnel/test/keys/agent2-cert.pem deleted file mode 100644 index 8e4354d..0000000 --- a/node_modules/tunnel/test/keys/agent2-cert.pem +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIB7DCCAZYCCQC7gs0MDNn6MTANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJV -UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO -BgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MjEgMB4GCSqGSIb3DQEJARYR -cnlAdGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEy -WjB9MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYD -VQQKEwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MjEg -MB4GCSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEF -AANLADBIAkEAyXb8FrRdKbhrKLgLSsn61i1C7w7fVVVd7OQsmV/7p9WB2lWFiDlC -WKGU9SiIz/A6wNZDUAuc2E+VwtpCT561AQIDAQABMA0GCSqGSIb3DQEBBQUAA0EA -C8HzpuNhFLCI3A5KkBS5zHAQax6TFUOhbpBCR0aTDbJ6F1liDTK1lmU/BjvPoj+9 -1LHwrmh29rK8kBPEjmymCQ== ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/agent2-csr.pem b/node_modules/tunnel/test/keys/agent2-csr.pem deleted file mode 100644 index a670c4c..0000000 --- a/node_modules/tunnel/test/keys/agent2-csr.pem +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH -EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD -EwZhZ2VudDIxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ -KoZIhvcNAQEBBQADSwAwSAJBAMl2/Ba0XSm4ayi4C0rJ+tYtQu8O31VVXezkLJlf -+6fVgdpVhYg5QlihlPUoiM/wOsDWQ1ALnNhPlcLaQk+etQECAwEAAaAlMCMGCSqG -SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB -AJnll2pt5l0pzskQSpjjLVTlFDFmJr/AZ3UK8v0WxBjYjCe5Jx4YehkChpxIyDUm -U3J9q9MDUf0+Y2+EGkssFfk= ------END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/agent2-key.pem b/node_modules/tunnel/test/keys/agent2-key.pem deleted file mode 100644 index 522903c..0000000 --- a/node_modules/tunnel/test/keys/agent2-key.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIBOgIBAAJBAMl2/Ba0XSm4ayi4C0rJ+tYtQu8O31VVXezkLJlf+6fVgdpVhYg5 -QlihlPUoiM/wOsDWQ1ALnNhPlcLaQk+etQECAwEAAQJBAMT6Bf34+UHKY1ObpsbH -9u2jsVblFq1rWvs8GPMY6oertzvwm3DpuSUp7PTgOB1nLTLYtCERbQ4ovtN8tn3p -OHUCIQDzIEGsoCr5vlxXvy2zJwu+fxYuhTZWMVuo1397L0VyhwIhANQh+yzqUgaf -WRtSB4T2W7ADtJI35ET61jKBty3CqJY3AiAIwju7dVW3A5WeD6Qc1SZGKZvp9yCb -AFI2BfVwwaY11wIgXF3PeGcvACMyMWsuSv7aPXHfliswAbkWuzcwA4TW01ECIGWa -cgsDvVFxmfM5NPSuT/UDTa6R5BFISB5ea0N0AR3I ------END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/agent2.cnf b/node_modules/tunnel/test/keys/agent2.cnf deleted file mode 100644 index 0a9f2c7..0000000 --- a/node_modules/tunnel/test/keys/agent2.cnf +++ /dev/null @@ -1,19 +0,0 @@ -[ req ] -default_bits = 1024 -days = 999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = US -ST = CA -L = SF -O = Joyent -OU = Node.js -CN = agent2 -emailAddress = ry@tinyclouds.org - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/agent3-cert.pem b/node_modules/tunnel/test/keys/agent3-cert.pem deleted file mode 100644 index e4a2350..0000000 --- a/node_modules/tunnel/test/keys/agent3-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICKjCCAZMCCQCDBr594bsJmTANBgkqhkiG9w0BAQUFADB6MQswCQYDVQQGEwJV -UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO -BgNVBAsTB05vZGUuanMxDDAKBgNVBAMTA2NhMjEgMB4GCSqGSIb3DQEJARYRcnlA -dGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEyWjB9 -MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQK -EwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MzEgMB4G -CSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEFAANL -ADBIAkEAtlNDZ+bHeBI0B2gD/IWqA7Aq1hwsnS4+XpnLesjTQcL2JwFFpkR0oWrw -yjrYhCogi7c5gjKrLZF1d2JD5JgHgQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAJoK -bXwsImk7vJz9649yrmsXwnuGbEKVYMvqcGyjaZNP9lYEG41y5CeRzxhWy2rlYdhE -f2nqE2lg75oJP7LQqfQY7aCqwahM3q/GQbsfKVCGjF7TVyq9TQzd8iW+FEJIQzSE -3aN85hR67+3VAXeSzmkGSVBO2m1SJIug4qftIkc2 ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/agent3-csr.pem b/node_modules/tunnel/test/keys/agent3-csr.pem deleted file mode 100644 index e6c0c74..0000000 --- a/node_modules/tunnel/test/keys/agent3-csr.pem +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH -EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD -EwZhZ2VudDMxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ -KoZIhvcNAQEBBQADSwAwSAJBALZTQ2fmx3gSNAdoA/yFqgOwKtYcLJ0uPl6Zy3rI -00HC9icBRaZEdKFq8Mo62IQqIIu3OYIyqy2RdXdiQ+SYB4ECAwEAAaAlMCMGCSqG -SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB -AEGo76iH+a8pnE+RWQT+wg9/BL+iIuqrcFXLs0rbGonqderrwXAe15ODwql/Bfu3 -zgMt8ooTsgMPcMX9EgmubEM= ------END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/agent3-key.pem b/node_modules/tunnel/test/keys/agent3-key.pem deleted file mode 100644 index d72f071..0000000 --- a/node_modules/tunnel/test/keys/agent3-key.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIBOwIBAAJBALZTQ2fmx3gSNAdoA/yFqgOwKtYcLJ0uPl6Zy3rI00HC9icBRaZE -dKFq8Mo62IQqIIu3OYIyqy2RdXdiQ+SYB4ECAwEAAQJAIk+G9s2SKgFa8y3a2jGZ -LfqABSzmJGooaIsOpLuYLd6eCC31XUDlT4rPVGRhysKQCQ4+NMjgdnj9ZqNnvXY/ -RQIhAOgbdltr3Ey2hy7RuDW5rmOeJTuVqCrZ7QI8ifyCEbYTAiEAyRfvWSvvASeP -kZTMUhATRUpuyDQW+058NE0oJSinTpsCIQCR/FPhBGI3TcaQyA9Ym0T4GwvIAkUX -TqInefRAAX8qSQIgZVJPAdIWGbHSL9sWW97HpukLCorcbYEtKbkamiZyrjMCIQCX -lX76ttkeId5OsJGQcF67eFMMr2UGZ1WMf6M39lCYHQ== ------END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/agent3.cnf b/node_modules/tunnel/test/keys/agent3.cnf deleted file mode 100644 index 26db5ba..0000000 --- a/node_modules/tunnel/test/keys/agent3.cnf +++ /dev/null @@ -1,19 +0,0 @@ -[ req ] -default_bits = 1024 -days = 999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = US -ST = CA -L = SF -O = Joyent -OU = Node.js -CN = agent3 -emailAddress = ry@tinyclouds.org - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/agent4-cert.pem b/node_modules/tunnel/test/keys/agent4-cert.pem deleted file mode 100644 index 07157b9..0000000 --- a/node_modules/tunnel/test/keys/agent4-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSDCCAbGgAwIBAgIJAIMGvn3huwmaMA0GCSqGSIb3DQEBBQUAMHoxCzAJBgNV -BAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UEBxMCU0YxDzANBgNVBAoTBkpveWVu -dDEQMA4GA1UECxMHTm9kZS5qczEMMAoGA1UEAxMDY2EyMSAwHgYJKoZIhvcNAQkB -FhFyeUB0aW55Y2xvdWRzLm9yZzAeFw0xMTAzMTQxODI5MTJaFw0zODA3MjkxODI5 -MTJaMH0xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UEBxMCU0YxDzAN -BgNVBAoTBkpveWVudDEQMA4GA1UECxMHTm9kZS5qczEPMA0GA1UEAxMGYWdlbnQ0 -MSAwHgYJKoZIhvcNAQkBFhFyeUB0aW55Y2xvdWRzLm9yZzBcMA0GCSqGSIb3DQEB -AQUAA0sAMEgCQQDN/yMfmQ8zdvmjlGk7b3Mn6wY2FjaMb4c5ENJX15vyYhKS1zhx -6n0kQIn2vf6yqG7tO5Okz2IJiD9Sa06mK6GrAgMBAAGjFzAVMBMGA1UdJQQMMAoG -CCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4GBAA8FXpRmdrHBdlofNvxa14zLvv0N -WnUGUmxVklFLKXvpVWTanOhVgI2TDCMrT5WvCRTD25iT1EUKWxjDhFJrklQJ+IfC -KC6fsgO7AynuxWSfSkc8/acGiAH+20vW9QxR53HYiIDMXEV/wnE0KVcr3t/d70lr -ImanTrunagV+3O4O ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/agent4-csr.pem b/node_modules/tunnel/test/keys/agent4-csr.pem deleted file mode 100644 index 97e115d..0000000 --- a/node_modules/tunnel/test/keys/agent4-csr.pem +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH -EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD -EwZhZ2VudDQxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ -KoZIhvcNAQEBBQADSwAwSAJBAM3/Ix+ZDzN2+aOUaTtvcyfrBjYWNoxvhzkQ0lfX -m/JiEpLXOHHqfSRAifa9/rKobu07k6TPYgmIP1JrTqYroasCAwEAAaAlMCMGCSqG -SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB -AMzo7GUOBtGm5MSck1rrEE2C1bU3qoVvXVuiN3A/57zXeNeq24FZMLnkDeL9U+/b -Kj646XFou04gla982Xp74p0= ------END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/agent4-key.pem b/node_modules/tunnel/test/keys/agent4-key.pem deleted file mode 100644 index b770b01..0000000 --- a/node_modules/tunnel/test/keys/agent4-key.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIBOQIBAAJBAM3/Ix+ZDzN2+aOUaTtvcyfrBjYWNoxvhzkQ0lfXm/JiEpLXOHHq -fSRAifa9/rKobu07k6TPYgmIP1JrTqYroasCAwEAAQJAN8RQb+dx1A7rejtdWbfM -Rww7PD07Oz2eL/a72wgFsdIabRuVypIoHunqV0sAegYtNJt9yu+VhREw0R5tx/qz -EQIhAPY+nmzp0b4iFRk7mtGUmCTr9iwwzoqzITwphE7FpQnFAiEA1ihUHFT9YPHO -f85skM6qZv77NEgXHO8NJmQZ5GX1ZK8CICzle+Mluo0tD6W7HV4q9pZ8wzSJbY8S -W/PpKetm09F1AiAWTw8sAGKAtc/IGo3Oq+iuYAN1F8lolzJsfGMCGujsOwIgAJKP -t3eXilwX3ZlsDWSklWNZ7iYcfYrvAc3JqU6gFCE= ------END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/agent4.cnf b/node_modules/tunnel/test/keys/agent4.cnf deleted file mode 100644 index 5e583eb..0000000 --- a/node_modules/tunnel/test/keys/agent4.cnf +++ /dev/null @@ -1,21 +0,0 @@ -[ req ] -default_bits = 1024 -days = 999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = US -ST = CA -L = SF -O = Joyent -OU = Node.js -CN = agent4 -emailAddress = ry@tinyclouds.org - -[ req_attributes ] -challengePassword = A challenge password - -[ ext_key_usage ] -extendedKeyUsage = clientAuth diff --git a/node_modules/tunnel/test/keys/ca1-cert.pem b/node_modules/tunnel/test/keys/ca1-cert.pem deleted file mode 100644 index 640c084..0000000 --- a/node_modules/tunnel/test/keys/ca1-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICIzCCAYwCCQC4ONZJx5BOwjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK -UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTExJTAjBgkqhkiG9w0B -CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw -NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww -CgYDVQQDEwNjYTExJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu -anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJMS1ug8jUu0wwEfD4h9/Mg -w0fvs7JbpMxtwpdcFpg/6ECd8YzGUvljLzeHPe2AhF26MiWIUN3YTxZRiQQ2tv93 -afRVWchdPypytmuxv2aYGjhZ66Tv4vNRizM71OE+66+KS30gEQW2k4MTr0ZVlRPR -OVey+zRSLdVaKciB/XaBAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEApfbly4b+Ry1q -bGIgGrlTvNFvF+j2RuHqSpuTB4nKyw1tbNreKmEEb6SBEfkjcTONx5rKECZ5RRPX -z4R/o1G6Dn21ouf1pWQO0BC/HnLN30KvvsoZRoxBn/fqBlJA+j/Kpj3RQgFj6l2I -AKI5fD+ucPqRGhjmmTsNyc+Ln4UfAq8= ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/ca1-cert.srl b/node_modules/tunnel/test/keys/ca1-cert.srl deleted file mode 100644 index d7f4b79..0000000 --- a/node_modules/tunnel/test/keys/ca1-cert.srl +++ /dev/null @@ -1 +0,0 @@ -B111C9CEF0257692 diff --git a/node_modules/tunnel/test/keys/ca1-key.pem b/node_modules/tunnel/test/keys/ca1-key.pem deleted file mode 100644 index aaa58ae..0000000 --- a/node_modules/tunnel/test/keys/ca1-key.pem +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIbo5wvG42IY0CAggA -MBQGCCqGSIb3DQMHBAgf8SPuz4biYASCAoAR4r8MVikusOAEt4Xp6nB7whrMX4iG -G792Qpf21nHZPMV73w3cdkfimbAfUn8F50tSJwdrAa8U9BjjpL9Kt0loIyXt/r8c -6PWAQ4WZuLPgTFUTJUNAXrunBHI0iFWYEN4YzJYmT1qN3J4u0diy0MkKz6eJPfZ3 -3v97+nF7dR2H86ZgLKsuE4pO5IRb60XW85d7CYaY6rU6l6mXMF0g9sIccHTlFoet -Xm6cA7NAm1XSI1ciYcoc8oaVE9dXoOALaTnBEZ2MJGpsYQ0Hr7kB4VKAO9wsOta5 -L9nXPv79Nzo1MZMChkrORFnwOzH4ffsUwVQ70jUzkt5DEyzCM1oSxFNRQESxnFrr -7c1jLg2gxAVwnqYo8njsKJ23BZqZUxHsBgB2Mg1L/iPT6zhclD0u3RZx9MR4ezB2 -IqoCF19Z5bblkReAeVRAE9Ol4hKVaCEIIPUspcw7eGVGONalHDCSXpIFnJoZLeXJ -OZjLmYlA6KkJw52eNE5IwIb8l/tha2fwNpRvlMoXp65yH9wKyJk8zPSM6WAk4dKD -nLrTCK4KtM6aIbG14Mff6WEf3uaLPM0cLwxmuypfieCZfkIzgytNdFZoBgaYUpon -zazvUMoy3gqDBorcU08SaosdRoL+s+QVkRhA29shf42lqOM4zbh0dTul4QDlLG0U -VBNeMJ3HnrqATfBU28j3bUqtuF2RffgcN/3ivlBjcyzF/iPt0TWmm6Zz5v4K8+b6 -lOm6gofIz+ffg2cXfPzrqZ2/xhFkcerRuN0Xp5eAhlI2vGJVGuEc4X+tT7VtQgLV -iovqzlLhp+ph/gsfCcsYZ9iso3ozw+Cx1HfJ8XT7yWUgXxblkt4uszEo ------END ENCRYPTED PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/ca1.cnf b/node_modules/tunnel/test/keys/ca1.cnf deleted file mode 100644 index dcb0637..0000000 --- a/node_modules/tunnel/test/keys/ca1.cnf +++ /dev/null @@ -1,17 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no -output_password = password - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = ca1 -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/ca2-cert.pem b/node_modules/tunnel/test/keys/ca2-cert.pem deleted file mode 100644 index 4c29c87..0000000 --- a/node_modules/tunnel/test/keys/ca2-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICIzCCAYwCCQCxIhZSDET+8DANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK -UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0B -CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw -NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww -CgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu -anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaaLMMe7K5eYABH3NnJoimG -LvY4S5tdGF6YRwfkn1bgGa+kEw1zNqa/Y0jSzs4h7bApt3+bKTalR4+Zk+0UmWgZ -Gvlq8+mdqDXtBKoWE3vYDPBmeNyKsgxf9UIhFOpsxVUeYP8t66qJyUk/FlFJcDqc -WPawikl1bUFSZXBKu4PxAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAwh3sXPIkA5kn -fpg7fV5haS4EpFr9ia61dzWbhXDZtasAx+nWdWqgG4T+HIYSLlMNZbGJ998uhFZf -DEHlbY/WuSBukZ0w+xqKBtPyjLIQKVvNiaTx5YMzQes62R1iklOXzBzyHbYIxFOG -dqLfIjEe/mVVoR23LN2tr8Wa6+rmd+w= ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/ca2-cert.srl b/node_modules/tunnel/test/keys/ca2-cert.srl deleted file mode 100644 index 2749952..0000000 --- a/node_modules/tunnel/test/keys/ca2-cert.srl +++ /dev/null @@ -1 +0,0 @@ -9BF2D4B2E00EDF16 diff --git a/node_modules/tunnel/test/keys/ca2-crl.pem b/node_modules/tunnel/test/keys/ca2-crl.pem deleted file mode 100644 index 166df74..0000000 --- a/node_modules/tunnel/test/keys/ca2-crl.pem +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN X509 CRL----- -MIIBXTCBxzANBgkqhkiG9w0BAQQFADB6MQswCQYDVQQGEwJVUzELMAkGA1UECBMC -Q0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAOBgNVBAsTB05vZGUu -anMxDDAKBgNVBAMTA2NhMjEgMB4GCSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5v -cmcXDTExMDMxNDE4MjkxNloXDTEzMTIwNzE4MjkxNlowHDAaAgkAgwa+feG7CZoX -DTExMDMxNDE4MjkxNFowDQYJKoZIhvcNAQEEBQADgYEArRKuEkOla61fm4zlZtHe -LTXFV0Hgo21PScHAp6JqPol4rN5R9+EmUkv7gPCVVBJ9VjIgxSosHiLsDiz3zR+u -txHemhzbdIVANAIiChnFct8sEqH2eL4N6XNUIlMIR06NjNl7NbN8w8haqiearnuT -wmnaL4TThPmpbpKAF7N7JqQ= ------END X509 CRL----- diff --git a/node_modules/tunnel/test/keys/ca2-database.txt b/node_modules/tunnel/test/keys/ca2-database.txt deleted file mode 100644 index a0966d2..0000000 --- a/node_modules/tunnel/test/keys/ca2-database.txt +++ /dev/null @@ -1 +0,0 @@ -R 380729182912Z 110314182914Z 8306BE7DE1BB099A unknown /C=US/ST=CA/L=SF/O=Joyent/OU=Node.js/CN=agent4/emailAddress=ry@tinyclouds.org diff --git a/node_modules/tunnel/test/keys/ca2-key.pem b/node_modules/tunnel/test/keys/ca2-key.pem deleted file mode 100644 index 9cea659..0000000 --- a/node_modules/tunnel/test/keys/ca2-key.pem +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQI3aq9fKZIOF0CAggA -MBQGCCqGSIb3DQMHBAjyunMfVve0OwSCAoAdMsrRFlQUSILw+bq3cSVIIbFjwcs0 -B1Uz2rc9SB+1qjsazjv4zvPQSXTrsx2EOSJf9PSPz7r+c0NzO9vfWLorpXof/lwL -C1tRN7/1OqEW/mTK+1wlv0M5C4cmf44BBXmI+y+RWrQ/qc+CWEMvfHwv9zWr2K+i -cLlZv55727GvZYCMMVLiqYd/Ejj98loBsE5dhN4JJ5MPaN3UHhFTCpD453GIIzCi -FRuYhOOtX4qYoEuP2db4S2qu26723ZJnYBEHkK2YZiRrgvoZHugyGIr4f/RRoSUI -fPgycgQfL3Ow+Y1G533PiZ+CYgh9cViUzhZImEPiZpSuUntAD1loOYkJuV9Ai9XZ -+t6+7tfkM3aAo1bkaU8KcfINxxNWfAhCbUQw+tGJl2A+73OM5AGjGSfzjQQL/FOa -5omfEvdfEX2XyRRlqnQ2VucvSTL9ZdzbIJGg/euJTpM44Fwc7yAZv2aprbPoPixu -yyf0LoTjlGGSBZvHkunpWx82lYEXvHhcnCxV5MDFw8wehvDrvcSuzb8//HzLOiOB -gzUr3DOQk4U1UD6xixZjAKC+NUwTVZoHg68KtmQfkq+eGUWf5oJP4xUigi3ui/Wy -OCBDdlRBkFtgLGL51KJqtq1ixx3Q9HMl0y6edr5Ls0unDIo0LtUWUUcAtr6wl+kK -zSztxFMi2zTtbhbkwoVpucNstFQNfV1k22vtnlcux2FV2DdZiJQwYpIbr8Gj6gpK -gtV5l9RFe21oZBcKPt/chrF8ayiClfGMpF3D2p2GqGCe0HuH5uM/JAFf60rbnriA -Nu1bWiXsXLRUXcLIQ/uEPR3Mvvo9k1h4Q6it1Rp67eQiXCX6h2uFq+sB ------END ENCRYPTED PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/ca2-serial b/node_modules/tunnel/test/keys/ca2-serial deleted file mode 100644 index 8a0f05e..0000000 --- a/node_modules/tunnel/test/keys/ca2-serial +++ /dev/null @@ -1 +0,0 @@ -01 diff --git a/node_modules/tunnel/test/keys/ca2.cnf b/node_modules/tunnel/test/keys/ca2.cnf deleted file mode 100644 index 46e8274..0000000 --- a/node_modules/tunnel/test/keys/ca2.cnf +++ /dev/null @@ -1,17 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no -output_password = password - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = ca2 -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/ca3-cert.pem b/node_modules/tunnel/test/keys/ca3-cert.pem deleted file mode 100644 index 02b3f7a..0000000 --- a/node_modules/tunnel/test/keys/ca3-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICIzCCAYwCCQCudHFhEWiUHDANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK -UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0B -CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw -NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww -CgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu -anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJPRJMhCNtxX6dQ3rLdrzVCl -XJMSRIICpbsc7arOzSJcrsIYeYC4d29dGwxYNLnAkKSmHujFT9SmFgh88CoYETLp -gE9zCk9hVCwUlWelM/UaIrzeLT4SC3VBptnLmMtk2mqFniLcaFdMycAcX8OIhAgG -fbqyT5Wxwz7UMegip2ZjAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEADpu8a/W+NPnS -mhyIOxXn8O//2oH9ELlBYFLIgTid0xmS05x/MgkXtWqiBEEZFoOfoJBJxM3vTFs0 -PiZvcVjv0IIjDF4s54yRVH+4WI2p7cil1fgzAVRTuOIuR+VyN7ct8s26a/7GFDq6 -NJMByyjsJHyxwwri5hVv+jbLCxmnDjI= ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/ca3-cert.srl b/node_modules/tunnel/test/keys/ca3-cert.srl deleted file mode 100644 index cfd39e1..0000000 --- a/node_modules/tunnel/test/keys/ca3-cert.srl +++ /dev/null @@ -1 +0,0 @@ -EF7B2CF0FA61DF41 diff --git a/node_modules/tunnel/test/keys/ca3-key.pem b/node_modules/tunnel/test/keys/ca3-key.pem deleted file mode 100644 index 8931132..0000000 --- a/node_modules/tunnel/test/keys/ca3-key.pem +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIwAta+L4c9soCAggA -MBQGCCqGSIb3DQMHBAgqRud2p3SvogSCAoDXoDJOJDkvgFpQ6rxeV5r0fLX4SrGJ -quv4yt02QxSDUPN2ZLtBt6bLzg4Zv2pIggufYJcZ2IOUnX82T7FlvBP8hbW1q3Bs -jAso7z8kJlFrZjNudjuP2l/X8tjrVyr3I0PoRoomtcHnCcSDdyne8Dqqj1enuikF -8b7FZUqocNLfu8LmNGxMmMwjw3UqhtpP5DjqV60B8ytQFPoz/gFh6aNGvsrD/avU -Dj8EJkQZP6Q32vmCzAvSiLjk7FA7RFmBtaurE9hJYNlc5v1eo69EUwPkeVlTpglJ -5sZAHxlhQCgc72ST6uFQKiMO3ng/JJA5N9EvacYSHQvI1TQIo43V2A//zUh/5hGL -sDv4pRuFq9miX8iiQpwo1LDfRzdwg7+tiLm8/mDyeLUSzDNc6GIX/tC9R4Ukq4ge -1Cfq0gtKSRxZhM8HqpGBC9rDs5mpdUqTRsoHLFn5T6/gMiAtrLCJxgD8JsZBa8rM -KZ09QEdZXTvpyvZ8bSakP5PF6Yz3QYO32CakL7LDPpCng0QDNHG10YaZbTOgJIzQ -NJ5o87DkgDx0Bb3L8FoREIBkjpYFbQi2fvPthoepZ3D5VamVsOwOiZ2sR1WF2J8l -X9c8GdG38byO+SQIPNZ8eT5JvUcNeSlIZiVSwvaEk496d2KzhmMMfoBLFVeHXG90 -CIZPleVfkTmgNQgXPWcFngqTZdDEGsHjEDDhbEAijB3EeOxyiiEDJPMy5zqkdy5D -cZ/Y77EDbln7omcyL+cGvCgBhhYpTbtbuBtzW4CiCvcfEB5N4EtJKOTRJXIpL/d3 -oVnZruqRRKidKwFMEZU2NZJX5FneAWFSeCv0IrY2vAUIc3El+n84CFFK ------END ENCRYPTED PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/ca3.cnf b/node_modules/tunnel/test/keys/ca3.cnf deleted file mode 100644 index 7b2378a..0000000 --- a/node_modules/tunnel/test/keys/ca3.cnf +++ /dev/null @@ -1,17 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no -output_password = password - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = ca3 -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/ca4-cert.pem b/node_modules/tunnel/test/keys/ca4-cert.pem deleted file mode 100644 index ed0686a..0000000 --- a/node_modules/tunnel/test/keys/ca4-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICIzCCAYwCCQDUGh2r7lOpITANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK -UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0B -CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw -NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww -CgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu -anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOOC+SPC8XzkjIHfKPMzzNV6 -O/LpqQWdzJtEvFNW0oQ9g8gSV4iKqwUFrLNnSlwSGigvqKqGmYtG8S17ANWInoxI -c3sQlrS2cGbgLUBNKu4hZ7s+11EPOjbnn0QUE5w9GN8fy8CDx7ID/8URYKoxcoRv -0w7EJ2agfd68KS1ayxUXAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAumPFeR63Dyki -SWQtRAe2QWkIFlSRAR2PvSDdsDMLwMeXF5wD3Hv51yfTu9Gkg0QJB86deYfQ5vfV -4QsOQ35icesa12boyYpTE0/OoEX1f/s1sLlszpRvtAki3J4bkcGWAzM5yO1fKqpQ -MbtPzLn+DA7ymxuJa6EQAEb+kaJEBuU= ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/ca4-cert.srl b/node_modules/tunnel/test/keys/ca4-cert.srl deleted file mode 100644 index 5c11314..0000000 --- a/node_modules/tunnel/test/keys/ca4-cert.srl +++ /dev/null @@ -1 +0,0 @@ -B01FE0416A2EDCF5 diff --git a/node_modules/tunnel/test/keys/ca4-key.pem b/node_modules/tunnel/test/keys/ca4-key.pem deleted file mode 100644 index fa7aca1..0000000 --- a/node_modules/tunnel/test/keys/ca4-key.pem +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIWE/ri/feeikCAggA -MBQGCCqGSIb3DQMHBAiu6hUzoFnsVASCAoC53ZQ4gxLcFnb5yAcdCl4DdKOJ5m4G -CHosR87pJpZlO68DsCKwORUp9tTmb1/Q4Wm9n2kRf6VQNyVVm6REwzEPAgIJEgy2 -FqLmfqpTElbRsQako8UDXjDjaMO30e+Qhy8HOTrHMJZ6LgrU90xnOCPPeN9fYmIu -YBkX4qewUfu+wFzk/unUbFLChvJsEN4fdrlDwTJMHRzKwbdvg3mHlCnspWwjA2Mc -q27QPeb3mwRUajmqL0dT9y7wVYeAN2zV59VoWm6zV+dWFgyMlVrVCRYkqQC3xOsy -ZlKrGldrY8nNdv5s6+Sc7YavTJiJxHgIB7sm6QFIsdqjxTBEGD4/YhEI52SUw/xO -VJmOTWdWUz4FdWNi7286nfhZ0+mdv6fUoG54Qv6ahnUMJvEsp60LkR1gHXLzQu/m -+yDZFqY/IIg2QA7M3gL0Md5GrWydDlD2uBPoXcC4A5gfOHswzHWDKurDCpoMqdpn -CUQ/ZVl2rwF8Pnty61MjY1xCN1r8xQjFBCgcfBWw5v6sNRbr/vef3TfQIBzVm+hx -akDb1nckBsIjMT9EfeT6hXub2n0oehEHewF1COifbcOjnxToLSswPLrtb0behB+o -zTgftn+4XrkY0sFY69TzYtQVMLAsiWTpZFvAi+D++2pXlQ/bnxKJiBBc6kZuAGpN -z+cJ4kUuFE4S9v5C5vK89nIgcuJT06u8wYTy0N0j/DnIjSaVgGr0Y0841mXtU1VV -wUZjuyYrVwVT/g5r6uzEFldTcjmYkbMaxo+MYnEZZgqYJvu2QlK87YxJOwo+D1NX -4gl1s/bmlPlGw/t9TxutI3S9PEr3JM3013e9UPE+evlTG9IIrZaUPzyj ------END ENCRYPTED PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/ca4.cnf b/node_modules/tunnel/test/keys/ca4.cnf deleted file mode 100644 index ceac8f3..0000000 --- a/node_modules/tunnel/test/keys/ca4.cnf +++ /dev/null @@ -1,17 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no -output_password = password - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = ca4 -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/client.cnf b/node_modules/tunnel/test/keys/client.cnf deleted file mode 100644 index e3db741..0000000 --- a/node_modules/tunnel/test/keys/client.cnf +++ /dev/null @@ -1,16 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = localhost -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/client1-cert.pem b/node_modules/tunnel/test/keys/client1-cert.pem deleted file mode 100644 index 24ea1db..0000000 --- a/node_modules/tunnel/test/keys/client1-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICKTCCAZICCQDveyzw+mHfQTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK -UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0B -CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw -NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw -EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92 -ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYUuKyuxT93zvrS -mL8IMI8xu8dP3iRZDUYu6dmq6Dntgb7intfzxtEFVmfNCDGwJwg7UKx/FzftGxFb -9LksuvAQuW2FLhCrOmXUVU938OZkQRSflISD80kd4i9JEoKKYPX1imjaMugIQ0ta -Bq2orY6sna8JAUVDW6WO3wVEJ4mBAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAAbaH -bc/6dIFC9TPIDrgsLtsOtycdBJqKbFT1wThhyKncXF/iyaI+8N4UA+hXMjk8ODUl -BVmmgaN6ufMLwnx/Gdl9FLmmDq4FQ4zspClTJo42QPzg5zKoPSw5liy73LM7z+nG -g6IeM8RFlEbs109YxqvQnbHfTgeLdIsdvtNXU80= ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/client1-csr.pem b/node_modules/tunnel/test/keys/client1-csr.pem deleted file mode 100644 index c33a135..0000000 --- a/node_modules/tunnel/test/keys/client1-csr.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES -MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv -dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGFLisrsU/d876 -0pi/CDCPMbvHT94kWQ1GLunZqug57YG+4p7X88bRBVZnzQgxsCcIO1Csfxc37RsR -W/S5LLrwELlthS4Qqzpl1FVPd/DmZEEUn5SEg/NJHeIvSRKCimD19Ypo2jLoCENL -WgatqK2OrJ2vCQFFQ1uljt8FRCeJgQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg -Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAB5NvNSHX+WDlF5R -LNr7SI2NzIy5OWEAgTxLkvS0NS75zlDLScaqwgs1uNfB2AnH0Fpw9+pePEijlb+L -3VRLNpV8hRn5TKztlS3O0Z4PPb7hlDHitXukTOQYrq0juQacodVSgWqNbac+O2yK -qf4Y3A7kQO1qmDOfN6QJFYVIpPiP ------END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/client1-key.pem b/node_modules/tunnel/test/keys/client1-key.pem deleted file mode 100644 index 52aff97..0000000 --- a/node_modules/tunnel/test/keys/client1-key.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXAIBAAKBgQDGFLisrsU/d8760pi/CDCPMbvHT94kWQ1GLunZqug57YG+4p7X -88bRBVZnzQgxsCcIO1Csfxc37RsRW/S5LLrwELlthS4Qqzpl1FVPd/DmZEEUn5SE -g/NJHeIvSRKCimD19Ypo2jLoCENLWgatqK2OrJ2vCQFFQ1uljt8FRCeJgQIDAQAB -AoGAbfcM+xjfejeqGYcWs175jlVe2OyW93jUrLTYsDV4TMh08iLfaiX0pw+eg2vI -88TGNoSvacP4gNzJ3R4+wxp5AFlRKZ876yL7D0VKavMFwbyRk21+D/tLGvW6gqOC -4qi4IWSkfgBh5RK+o4jZcl5tzRPQyuxR3pJGBS33q5K2dEECQQDhV4NuKZcGDnKt -1AhmtzqsJ4wrp2a3ysZYDTWyA692NGXi2Vnpnc6Aw9JchJhT3cueFLcOTFrb/ttu -ZC/iA67pAkEA4Qe7LvcPvHlwNAmzqzOg2lYAqq+aJY2ghfJMqr3dPCJqbHJnLN6p -GXsqGngwVlnvso0O/n5g30UmzvkRMFZW2QJAbOMQy0alh3OrzntKo/eeDln9zYpS -hDUjqqCXdbF6M7AWG4vTeqOaiXYWTEZ2JPBj17tCyVH0BaIc/jbDPH9zIQJBALei -YH0l/oB2tTqyBB2cpxIlhqvDW05z8d/859WZ1PVivGg9P7cdCO+TU7uAAyokgHe7 -ptXFefYZb18NX5qLipkCQHjIo4BknrO1oisfsusWcCC700aRIYIDk0QyEEIAY3+9 -7ar/Oo1EbqWA/qN7zByPuTKrjrb91/D+IMFUFgb4RWc= ------END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/client1.cnf b/node_modules/tunnel/test/keys/client1.cnf deleted file mode 100644 index e3db741..0000000 --- a/node_modules/tunnel/test/keys/client1.cnf +++ /dev/null @@ -1,16 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = localhost -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/client2-cert.pem b/node_modules/tunnel/test/keys/client2-cert.pem deleted file mode 100644 index f0de53c..0000000 --- a/node_modules/tunnel/test/keys/client2-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICKTCCAZICCQCwH+BBai7c9TANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK -UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0B -CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw -NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw -EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92 -ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMJQGt34PZX5pQmi -3bNp3dryr7qPO3oGhTeShLCeZ6PPCdnmVl0PnT0n8/DFBlaijbvXGU9AjcFZ7gg7 -hcSAFLGmPEb2pug021yzl7u0qUD2fnVaEzfJ04ZU4lUCFqGKsfFVQuIkDHFwadbE -AO+8EqOmDynUMkKfHPWQK6O9jt5ZAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEA143M -QIygJGDv2GFKlVgV05/CYZo6ouX9I6vPRekJnGeL98lmVH83Ogb7Xmc2SbJ18qFq -naBYnUEmHPUAZ2Ms2KuV3OOvscUSCsEJ4utJYznOT8PsemxVWrgG1Ba+zpnPkdII -p+PanKCsclNUKwBlSkJ8XfGi9CAZJBykwws3O1c= ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/client2-csr.pem b/node_modules/tunnel/test/keys/client2-csr.pem deleted file mode 100644 index b7507f4..0000000 --- a/node_modules/tunnel/test/keys/client2-csr.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES -MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv -dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCUBrd+D2V+aUJ -ot2zad3a8q+6jzt6BoU3koSwnmejzwnZ5lZdD509J/PwxQZWoo271xlPQI3BWe4I -O4XEgBSxpjxG9qboNNtcs5e7tKlA9n51WhM3ydOGVOJVAhahirHxVULiJAxxcGnW -xADvvBKjpg8p1DJCnxz1kCujvY7eWQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg -Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAA//UPKPpVEpflDj -DBboWewa6yw8FEOnMvh6eeg/a8KbXfIYnkZRtxbmH06ygywBy/RUBCbM5EzyElkJ -bTVKorzCHnxuTfSnKQ68ZD+vI2SNjiWqQFXW6oOCPzLbtaTJVKw5D6ylBp8Zsu6n -BzQ/4Y42aX/HW4nfJeDydxNFYVJJ ------END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/client2-key.pem b/node_modules/tunnel/test/keys/client2-key.pem deleted file mode 100644 index ecb616e..0000000 --- a/node_modules/tunnel/test/keys/client2-key.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICWwIBAAKBgQDCUBrd+D2V+aUJot2zad3a8q+6jzt6BoU3koSwnmejzwnZ5lZd -D509J/PwxQZWoo271xlPQI3BWe4IO4XEgBSxpjxG9qboNNtcs5e7tKlA9n51WhM3 -ydOGVOJVAhahirHxVULiJAxxcGnWxADvvBKjpg8p1DJCnxz1kCujvY7eWQIDAQAB -AoGAbiT0JdCaMFIzb/PnEdU30e1xGSIpx7C8gNTH7EnOW7d3URHU8KlyKwFjsJ4u -SpuYFdsG2Lqx3+D3IamD2O/1SgODmtdFas1C/hQ2zx42SgyBQolVJU1MHJxHqmCb -nm2Wo8aHmvFXpQ8OF4YJLPxLOSdvmq0PC17evDyjz5PciWUCQQD5yzaBpJ7yzGwd -b6nreWj6pt+jfi11YsA3gAdvTJcFzMGyNNC+U9OExjQqHsyaHyxGhHKQ6y+ybZkR -BggkudPfAkEAxyQC/hmcvWegdGI4xOJNbm0kv8UyxyeqhtgzEW2hWgEQs4k3fflZ -iNpvxyIBIp/7zZo02YqeQfZlDYuxKypUxwJAa6jQBzRCZXcBqfY0kA611kIR5U8+ -nHdBTSpbCfdCp/dGDF6DEWTjpzgdx4GawVpqJMJ09kzHM+nUrOeinuGQlQJAMAsV -Gb6OHPfaMxnbPkymh6SXQBjQNlHwhxWzxFmhmrg1EkthcufsXOLuIqmmgnb8Zc71 -PyJ9KcbK/GieNp7A0wJAIz3Mm3Up9Rlk25TH9k5e3ELjC6fkd93u94Uo145oTgDm -HSbCbjifP5eVl66PztxZppG2GBXiXT0hA/RMruTQMg== ------END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/client2.cnf b/node_modules/tunnel/test/keys/client2.cnf deleted file mode 100644 index e3db741..0000000 --- a/node_modules/tunnel/test/keys/client2.cnf +++ /dev/null @@ -1,16 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = localhost -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/proxy1-cert.pem b/node_modules/tunnel/test/keys/proxy1-cert.pem deleted file mode 100644 index 30851fe..0000000 --- a/node_modules/tunnel/test/keys/proxy1-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICKTCCAZICCQCb8tSy4A7fFTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK -UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0B -CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw -NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw -EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92 -ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALiUyeosVxtJK8G4 -sAqU2DBLx5sMuZpV/YcW/YxUuJv3t/9TpVxcWAs6VRPzi5fqKe8TER8qxi1/I8zV -Qks1gWyZ01reU6Wpdt1MZguF036W2qKOxlJXvnqnRDWu9IFf6KMjSJjFZb6nqhQv -aiL/80hqc2qXVfuJbSYlGrKWFFINAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEABPIn -+vQoDpJx7lVNJNOe7DE+ShCXCK6jkQY8+GQXB1sz5K0OWdZxUWOOp/fcjNJua0NM -hgnylWu/pmjPh7c9xHdZhuh6LPD3F0k4QqK+I2rg45gdBPZT2IxEvxNYpGIfayvY -ofOgbienn69tMzGCMF/lUmEJu7Bn08EbL+OyNBg= ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/proxy1-csr.pem b/node_modules/tunnel/test/keys/proxy1-csr.pem deleted file mode 100644 index 78ad220..0000000 --- a/node_modules/tunnel/test/keys/proxy1-csr.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES -MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv -dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4lMnqLFcbSSvB -uLAKlNgwS8ebDLmaVf2HFv2MVLib97f/U6VcXFgLOlUT84uX6invExEfKsYtfyPM -1UJLNYFsmdNa3lOlqXbdTGYLhdN+ltqijsZSV756p0Q1rvSBX+ijI0iYxWW+p6oU -L2oi//NIanNql1X7iW0mJRqylhRSDQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg -Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAFhZc2cvYGf8mCg/ -5nPWmnjNIqgy7uJnOGfE3AP4rW48yiVHCJK9ZmPogbH7gBMOBrrX8fLX3ThK9Sbj -uJlBlZD/19zjM+kvJ14DcievJ15S3KehVQ6Ipmgbz/vnAaL1D+ZiOnjQad2/Fzg4 -0MFXQaZFEUcI8fKnv/zmYi1aivej ------END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/proxy1-key.pem b/node_modules/tunnel/test/keys/proxy1-key.pem deleted file mode 100644 index d06fddd..0000000 --- a/node_modules/tunnel/test/keys/proxy1-key.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXQIBAAKBgQC4lMnqLFcbSSvBuLAKlNgwS8ebDLmaVf2HFv2MVLib97f/U6Vc -XFgLOlUT84uX6invExEfKsYtfyPM1UJLNYFsmdNa3lOlqXbdTGYLhdN+ltqijsZS -V756p0Q1rvSBX+ijI0iYxWW+p6oUL2oi//NIanNql1X7iW0mJRqylhRSDQIDAQAB -AoGADPSkl4M1Of0QzTAhaxy3b+xhvkhOXr7aZLkAYvEvZAMnLwy39puksmUNw7C8 -g5U0DEvST9W4w0jBQodVd+Hxi4dUS4BLDVVStaLMa1Fjai/4uBPxbsrvdHzDu7if -BI6t12vWNNRtTxbfCJ1Fs3nHvDG0ueBZX3fYWBIPPM4bRQECQQDjmCrxbkfFrN5z -JXHfmzoNovV7KzgwRLKOLF17dYnhaG3G77JYjhEjIg5VXmQ8XJrwS45C/io5feFA -qrsy/0v1AkEAz55QK8CLue+sn0J8Yw//yLjJT6BK4pCFFKDxyAvP/3r4t7+1TgDj -KAfUMWb5Hcn9iT3sEykUeOe0ghU0h5X2uQJBAKES2qGPuP/vvmejwpnMVCO+hxmq -ltOiavQv9eEgaHq826SFk6UUtpA01AwbB7momIckEgTbuKqDql2H94C6KdkCQQC7 -PfrtyoP5V8dmBk8qBEbZ3pVn45dFx7LNzOzhTo3yyhO/m/zGcZRsCMt9FnI7RG0M -tjTPfvAArm8kFj2+vie5AkASvVx478N8so+02QWKme4T3ZDX+HDBXgFH1+SMD91m -9tS6x2dtTNvvwBA2KFI1fUg3B/wDoKJQRrqwdl8jpoGP ------END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/proxy1.cnf b/node_modules/tunnel/test/keys/proxy1.cnf deleted file mode 100644 index e3db741..0000000 --- a/node_modules/tunnel/test/keys/proxy1.cnf +++ /dev/null @@ -1,16 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = localhost -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/proxy2-cert.pem b/node_modules/tunnel/test/keys/proxy2-cert.pem deleted file mode 100644 index dfe9d8e..0000000 --- a/node_modules/tunnel/test/keys/proxy2-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICJjCCAY8CCQCb8tSy4A7fFjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK -UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0B -CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw -NTEwMTEyMzIxWjBZMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQ8w -DQYDVQQDEwZwcm94eTIxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1l -bnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALZ3oNCmB2P4Q9DoUVFq -Z1ByASLm63jTPEumv2kX81GF5QMLRl59HBM6Te1rRR7wFHL0iBQUYuEzNPmedXpU -cds0uWl5teoO63ZSKFL1QLU3PMFo56AeWeznxOhy6vwWv3M8C391X6lYsiBow3K9 -d37p//GLIR+jl6Q4xYD41zaxAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEADUQgtmot -8zqsRQInjWAypcntkxX8hdUOEudN2/zjX/YtMZbr8rRvsZzBsUDdgK+E2EmEb/N3 -9ARZ0T2zWFFphJapkZOM1o1+LawN5ON5HfTPqr6d9qlHuRdGCBpXMUERO2V43Z+S -Zwm+iw1yZEs4buTmiw6zu6Nq0fhBlTiAweE= ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/proxy2-csr.pem b/node_modules/tunnel/test/keys/proxy2-csr.pem deleted file mode 100644 index 5510e7f..0000000 --- a/node_modules/tunnel/test/keys/proxy2-csr.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBvjCCAScCAQAwWTELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDEP -MA0GA1UEAxMGcHJveHkyMSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJvdmVt -ZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2d6DQpgdj+EPQ6FFR -amdQcgEi5ut40zxLpr9pF/NRheUDC0ZefRwTOk3ta0Ue8BRy9IgUFGLhMzT5nnV6 -VHHbNLlpebXqDut2UihS9UC1NzzBaOegHlns58Tocur8Fr9zPAt/dV+pWLIgaMNy -vXd+6f/xiyEfo5ekOMWA+Nc2sQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEgY2hh -bGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBADC4dh/+gQnJcPMQ0riJ -CBVLygcCWxkNvwM3ARboyihuNbzFX1f2g23Zr5iLphiuEFCPDOyd26hHieQ8Xo1y -FPuDXpWMx9X9MLjCWg8kdtada7HsYffbUvpjjL9TxFh+rX0cmr6Ixc5kV7AV4I6V -3h8BYJebX+XfuYrI1UwEqjqI ------END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/proxy2-key.pem b/node_modules/tunnel/test/keys/proxy2-key.pem deleted file mode 100644 index 29eed2c..0000000 --- a/node_modules/tunnel/test/keys/proxy2-key.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXQIBAAKBgQC2d6DQpgdj+EPQ6FFRamdQcgEi5ut40zxLpr9pF/NRheUDC0Ze -fRwTOk3ta0Ue8BRy9IgUFGLhMzT5nnV6VHHbNLlpebXqDut2UihS9UC1NzzBaOeg -Hlns58Tocur8Fr9zPAt/dV+pWLIgaMNyvXd+6f/xiyEfo5ekOMWA+Nc2sQIDAQAB -AoGBALPH0o9Bxu5c4pSnEdgh+oFskmoNE90MY9A2D0pA6uBcCHSjW0YmBs97FuTi -WExPSBarkJgYLgStK3j3A9Dv+uzRRT0gSr34vKFh5ozI+nJZOMNJyHDOCFiT9sm7 -urDW0gSq9OW/H8NbAkxkBZw0PaB9oW5nljuieVIFDYXNAeMBAkEA6NfBHjzp3GS0 -RbtaBkxn3CRlEoUUPVd3sJ6lW2XBu5AWrgNHRSlh0oBupXgd3cxWIB69xPOg6QjU -XmvcLjBlCQJBAMidTIw4s89m4+14eY/KuXaEgxW/awLEbQP2JDCjY1wT3Ya3Ggac -HIFuGdTbd2faJPxNJjoljZnatSdwY5aXFmkCQBQZM5FBnsooYys1vdKXW8uz1Imh -tRqKZ0l2mD1obi2bhWml3MwKg2ghL+vWj3VqwvBo1uaeRQB4g6RW2R2fjckCQQCf -FnZ0oCafa2WGlMo5qDbI8K6PGXv/9srIoHH0jC0oAKzkvuEJqtTEIw6jCOM43PoF -hhyxccRH5PNRckPXULs5AkACxKEL1dN+Bx72zE8jSU4DB5arpQdGOvuVsqXgVM/5 -QLneJEHGPCqNFS1OkWUYLtX0S28X5GmHMEpLRLpgE9JY ------END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/proxy2.cnf b/node_modules/tunnel/test/keys/proxy2.cnf deleted file mode 100644 index e62c90a..0000000 --- a/node_modules/tunnel/test/keys/proxy2.cnf +++ /dev/null @@ -1,16 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = proxy2 -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/server1-cert.pem b/node_modules/tunnel/test/keys/server1-cert.pem deleted file mode 100644 index d0b6430..0000000 --- a/node_modules/tunnel/test/keys/server1-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICKTCCAZICCQCxEcnO8CV2kTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK -UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTExJTAjBgkqhkiG9w0B -CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw -NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw -EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92 -ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALYb3z6TVgD8VmV2 -i0IHoes/HNVz+/UgXxRoA7gTUXp4Q69HBymWwm4fG61YMn7XAjy0gyC2CX/C0S74 -ZzHkhq1DCXCtlXCDx5oZhSRPpa902MVdDSRR+naLA4PPFkV2pI53hsFW37M5Dhge -+taFbih/dbjpOnhLD+SbkSKNTw/dAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAjDNi -mdmMM8Of/8iCYISqkqCG+7fz747Ntkg5fVMPufkwrBfkD9UjYVbfIpEOkZ3L0If9 -0/wNi0uZobIJnd/9B/e0cHKYnx0gkhUpMylaRvIV4odKe2vq3+mjwMb9syYXYDx3 -hw2qDMIIPr0S5ICeoIKXhbsYtODVxKSdJq+FjAI= ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/server1-csr.pem b/node_modules/tunnel/test/keys/server1-csr.pem deleted file mode 100644 index 9d9ff1b..0000000 --- a/node_modules/tunnel/test/keys/server1-csr.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES -MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv -dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2G98+k1YA/FZl -dotCB6HrPxzVc/v1IF8UaAO4E1F6eEOvRwcplsJuHxutWDJ+1wI8tIMgtgl/wtEu -+Gcx5IatQwlwrZVwg8eaGYUkT6WvdNjFXQ0kUfp2iwODzxZFdqSOd4bBVt+zOQ4Y -HvrWhW4of3W46Tp4Sw/km5EijU8P3QIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg -Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAJLLYClTc1BZbQi4 -2GrGEimzJoheXXD1vepECS6TaeYJFSQldMGdkn5D8TMXWW115V4hw7a1pCwvRBPH -dVEeh3u3ktI1e4pS5ozvpbpYanILrHCNOQ4PvKi9rzG9Km8CprPcrJCZlWf2QUBK -gVNgqZJeqyEcBu80/ajjc6xrZsSP ------END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/server1-key.pem b/node_modules/tunnel/test/keys/server1-key.pem deleted file mode 100644 index d24acc8..0000000 --- a/node_modules/tunnel/test/keys/server1-key.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXQIBAAKBgQC2G98+k1YA/FZldotCB6HrPxzVc/v1IF8UaAO4E1F6eEOvRwcp -lsJuHxutWDJ+1wI8tIMgtgl/wtEu+Gcx5IatQwlwrZVwg8eaGYUkT6WvdNjFXQ0k -Ufp2iwODzxZFdqSOd4bBVt+zOQ4YHvrWhW4of3W46Tp4Sw/km5EijU8P3QIDAQAB -AoGAcDioz+T3gM//ZbMxidUuQMu5twgsYhg6v1aBxDOTaEcoXqEElupikn31DlNl -eqiApmwOyl+jZunlAm7tGN/c5WjmZtW6watv1D7HjDIFJQBdiOv2jLeV5gsoArMP -f8Y13MS68nJ7/ZkqisovjBlD7ZInbyUiJj0FH/cazauflIECQQDwHgQ0J46eL5EG -3smQQG9/8b/Wsnf8s9Vz6X/KptsbL3c7mCBY9/+cGw0xVxoUOyO7KGPzpRhtz4Y0 -oP+JwISxAkEAwieUtl+SuUAn6er1tZzPPiAM2w6XGOAod+HuPjTAKVhLKHYIEJbU -jhPdjOGtZr10ED9g0m7M4n3JKMMM00W47QJBAOVkp7tztwpkgva/TG0lQeBHgnCI -G50t6NRN1Koz8crs88nZMb4NXwMxzM7AWcfOH/qjQan4pXfy9FG/JaHibGECQH8i -L+zj1E3dxsUTh+VuUv5ZOlHO0f4F+jnWBY1SOWpZWI2cDFfgjDqko3R26nbWI8Pn -3FyvFRZSS4CXiDRn+VkCQQCKPBl60QAifkZITqL0dCs+wB2hhmlWwqlpq1ZgeCby -zwmZY1auUK1BYBX1aPB85+Bm2Zhp5jnkwRcO7iSYy8+C ------END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/server1.cnf b/node_modules/tunnel/test/keys/server1.cnf deleted file mode 100644 index e3db741..0000000 --- a/node_modules/tunnel/test/keys/server1.cnf +++ /dev/null @@ -1,16 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = localhost -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/server2-cert.pem b/node_modules/tunnel/test/keys/server2-cert.pem deleted file mode 100644 index ba92620..0000000 --- a/node_modules/tunnel/test/keys/server2-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICJzCCAZACCQCxEcnO8CV2kjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK -UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTExJTAjBgkqhkiG9w0B -CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw -NTEwMTEyMzIxWjBaMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRAw -DgYDVQQDEwdzZXJ2ZXIyMSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJvdmVt -ZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEkKr9SHG6jtf5UNfL -u66wNi8jrbAW5keYy7ECWRGRFDE7ay4N8LDMmOO3/1eH2WpY0QM5JFxq78hoVQED -ogvoeVTw+Ni33yqY6VL2WRv84FN2BmCrDGJQ83EYdsJqPUnxuXvbmq7Viw3l/BEu -hvsp722KcToIrqt8mHKMc/nPRwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBALbdQz32 -CN0hJfJ6BtGyqee3zRSpufPY1KFV8OHSDG4qL55OfpjB5e5wsldp3VChTWzm2KM+ -xg9WSWurMINM5KLgUqCZ69ttg1gJ/SnZNolXhH0I3SG/DY4DGTHo9oJPoSrgrWbX -3ZmCoO6rrDoSuVRJ8dKMWJmt8O1pZ6ZRW2iM ------END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/server2-csr.pem b/node_modules/tunnel/test/keys/server2-csr.pem deleted file mode 100644 index f89c510..0000000 --- a/node_modules/tunnel/test/keys/server2-csr.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBvzCCASgCAQAwWjELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDEQ -MA4GA1UEAxMHc2VydmVyMjElMCMGCSqGSIb3DQEJARYWa29pY2hpa0BpbXByb3Zl -bWVudC5qcDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxJCq/Uhxuo7X+VDX -y7uusDYvI62wFuZHmMuxAlkRkRQxO2suDfCwzJjjt/9Xh9lqWNEDOSRcau/IaFUB -A6IL6HlU8PjYt98qmOlS9lkb/OBTdgZgqwxiUPNxGHbCaj1J8bl725qu1YsN5fwR -Lob7Ke9tinE6CK6rfJhyjHP5z0cCAwEAAaAlMCMGCSqGSIb3DQEJBzEWExRBIGNo -YWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAAOBgQB3rCGCErgshGKEI5j9 -togUBwD3ul91yRFSBoV2hVGXsTOalWa0XCI+9+5QQEOBlj1pUT8eDU8ve55mX1UX -AZEx+cbUQa9DNeiDAMX83GqHMD8fF2zqsY1mkg5zFKG3nhoIYSG15qXcpqAhxRpX -NUQnZ4yzt2pE0aiFfkXa3PM42Q== ------END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/server2-key.pem b/node_modules/tunnel/test/keys/server2-key.pem deleted file mode 100644 index 9f72b5c..0000000 --- a/node_modules/tunnel/test/keys/server2-key.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXQIBAAKBgQDEkKr9SHG6jtf5UNfLu66wNi8jrbAW5keYy7ECWRGRFDE7ay4N -8LDMmOO3/1eH2WpY0QM5JFxq78hoVQEDogvoeVTw+Ni33yqY6VL2WRv84FN2BmCr -DGJQ83EYdsJqPUnxuXvbmq7Viw3l/BEuhvsp722KcToIrqt8mHKMc/nPRwIDAQAB -AoGAQ/bRaGoYCK1DN80gEC2ApSTW/7saW5CbyNUFCw7I6CTXMPhKID/MobFraz86 -gJpIDxWVy7gqzD7ESG67vwnUm52ITojQiY3JH7NCNhq/39/aYZOz2d7rBv2mvhk3 -w7gxUsmtPVUz3s2/h1KYaGpM3b68TwMS9nIiwwHDJS1aR8ECQQDu/kOy+Z/0EVKC -APgiEzbxewAiy7BVzNppd8CR/5m1KxlsIoMr8OdLqVwiJ/13m3eZGkPNx5pLJ9Xv -sXER0ZcPAkEA0o19xA1AJ/v5qsRaWJaA+ftgQ8ZanqsWXhM9abAvkPdFLPKYWTfO -r9f8eUDH0+O9mA2eZ2mlsEcsmIHDTY6ESQJAO2lyIvfzT5VO0Yq0JKRqMDXHnt7M -A0hds4JVmPXVnDgOpdcejLniheigQs12MVmwrZrd6DYKoUxR3rhZx3g2+QJBAK/2 -5fuaI1sHP+HSlbrhlUrWJd6egA+I5nma1MFmKGqb7Kki2eX+OPNGq87eL+LKuyG/ -h/nfFkTbRs7x67n+eFkCQQCPgy381Vpa7lmoNUfEVeMSNe74FNL05IlPDs/BHcci -1GX9XzsFEqHLtJ5t1aWbGv39gb2WmPP3LJBsRPzLa2iQ ------END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/server2.cnf b/node_modules/tunnel/test/keys/server2.cnf deleted file mode 100644 index bfaa48b..0000000 --- a/node_modules/tunnel/test/keys/server2.cnf +++ /dev/null @@ -1,16 +0,0 @@ -[ req ] -default_bits = 1024 -days = 9999 -distinguished_name = req_distinguished_name -attributes = req_attributes -prompt = no - -[ req_distinguished_name ] -C = JP -OU = nodejs_jp -CN = server2 -emailAddress = koichik@improvement.jp - -[ req_attributes ] -challengePassword = A challenge password - diff --git a/node_modules/tunnel/test/keys/test.js b/node_modules/tunnel/test/keys/test.js deleted file mode 100644 index d828422..0000000 --- a/node_modules/tunnel/test/keys/test.js +++ /dev/null @@ -1,43 +0,0 @@ -var fs = require('fs'); -var tls = require('tls'); - -var server1Key = fs.readFileSync(__dirname + '/server1-key.pem'); -var server1Cert = fs.readFileSync(__dirname + '/server1-cert.pem'); -var clientKey = fs.readFileSync(__dirname + '/client-key.pem'); -var clientCert = fs.readFileSync(__dirname + '/client-cert.pem'); -var ca1Cert = fs.readFileSync(__dirname + '/ca1-cert.pem'); -var ca3Cert = fs.readFileSync(__dirname + '/ca3-cert.pem'); - -var server = tls.createServer({ - key: server1Key, - cert: server1Cert, - ca: [ca3Cert], - requestCert: true, - rejectUnauthorized: true, -}, function(s) { - console.log('connected on server'); - s.on('data', function(chunk) { - console.log('S:' + chunk); - s.write(chunk); - }); - s.setEncoding('utf8'); -}).listen(3000, function() { - var c = tls.connect({ - host: 'localhost', - port: 3000, - key: clientKey, - cert: clientCert, - ca: [ca1Cert], - rejectUnauthorized: true - }, function() { - console.log('connected on client'); - c.on('data', function(chunk) { - console.log('C:' + chunk); - }); - c.setEncoding('utf8'); - c.write('Hello'); - }); - c.on('error', function(err) { - console.log(err); - }); -}); diff --git a/node_modules/typed-rest-client/Handlers.d.ts b/node_modules/typed-rest-client/Handlers.d.ts index 780935d..3702255 100644 --- a/node_modules/typed-rest-client/Handlers.d.ts +++ b/node_modules/typed-rest-client/Handlers.d.ts @@ -1,4 +1,4 @@ -export { BasicCredentialHandler } from "./handlers/basiccreds"; -export { BearerCredentialHandler } from "./handlers/bearertoken"; -export { NtlmCredentialHandler } from "./handlers/ntlm"; -export { PersonalAccessTokenCredentialHandler } from "./handlers/personalaccesstoken"; +export { BasicCredentialHandler } from "./handlers/basiccreds"; +export { BearerCredentialHandler } from "./handlers/bearertoken"; +export { NtlmCredentialHandler } from "./handlers/ntlm"; +export { PersonalAccessTokenCredentialHandler } from "./handlers/personalaccesstoken"; diff --git a/node_modules/typed-rest-client/Handlers.js b/node_modules/typed-rest-client/Handlers.js index 0b9e040..ade3fa9 100644 --- a/node_modules/typed-rest-client/Handlers.js +++ b/node_modules/typed-rest-client/Handlers.js @@ -1,10 +1,10 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var basiccreds_1 = require("./handlers/basiccreds"); -exports.BasicCredentialHandler = basiccreds_1.BasicCredentialHandler; -var bearertoken_1 = require("./handlers/bearertoken"); -exports.BearerCredentialHandler = bearertoken_1.BearerCredentialHandler; -var ntlm_1 = require("./handlers/ntlm"); -exports.NtlmCredentialHandler = ntlm_1.NtlmCredentialHandler; -var personalaccesstoken_1 = require("./handlers/personalaccesstoken"); -exports.PersonalAccessTokenCredentialHandler = personalaccesstoken_1.PersonalAccessTokenCredentialHandler; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var basiccreds_1 = require("./handlers/basiccreds"); +exports.BasicCredentialHandler = basiccreds_1.BasicCredentialHandler; +var bearertoken_1 = require("./handlers/bearertoken"); +exports.BearerCredentialHandler = bearertoken_1.BearerCredentialHandler; +var ntlm_1 = require("./handlers/ntlm"); +exports.NtlmCredentialHandler = ntlm_1.NtlmCredentialHandler; +var personalaccesstoken_1 = require("./handlers/personalaccesstoken"); +exports.PersonalAccessTokenCredentialHandler = personalaccesstoken_1.PersonalAccessTokenCredentialHandler; diff --git a/node_modules/typed-rest-client/HttpClient.d.ts b/node_modules/typed-rest-client/HttpClient.d.ts index f5cd014..6650d7c 100644 --- a/node_modules/typed-rest-client/HttpClient.d.ts +++ b/node_modules/typed-rest-client/HttpClient.d.ts @@ -1,103 +1,105 @@ -/// -import url = require("url"); -import http = require("http"); -import ifm = require('./Interfaces'); -export declare enum HttpCodes { - OK = 200, - MultipleChoices = 300, - MovedPermanently = 301, - ResourceMoved = 302, - SeeOther = 303, - NotModified = 304, - UseProxy = 305, - SwitchProxy = 306, - TemporaryRedirect = 307, - PermanentRedirect = 308, - BadRequest = 400, - Unauthorized = 401, - PaymentRequired = 402, - Forbidden = 403, - NotFound = 404, - MethodNotAllowed = 405, - NotAcceptable = 406, - ProxyAuthenticationRequired = 407, - RequestTimeout = 408, - Conflict = 409, - Gone = 410, - InternalServerError = 500, - NotImplemented = 501, - BadGateway = 502, - ServiceUnavailable = 503, - GatewayTimeout = 504, -} -export declare class HttpClientResponse implements ifm.IHttpClientResponse { - constructor(message: http.IncomingMessage); - message: http.IncomingMessage; - readBody(): Promise; -} -export interface RequestInfo { - options: http.RequestOptions; - parsedUrl: url.Url; - httpModule: any; -} -export declare function isHttps(requestUrl: string): boolean; -export declare class HttpClient implements ifm.IHttpClient { - userAgent: string; - handlers: ifm.IRequestHandler[]; - requestOptions: ifm.IRequestOptions; - private _ignoreSslError; - private _socketTimeout; - private _httpProxy; - private _httpProxyBypassHosts; - private _allowRedirects; - private _maxRedirects; - private _allowRetries; - private _maxRetries; - private _agent; - private _proxyAgent; - private _keepAlive; - private _disposed; - private _certConfig; - private _ca; - private _cert; - private _key; - constructor(userAgent: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions); - options(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; - get(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; - del(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; - post(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise; - patch(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise; - put(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise; - head(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; - sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: ifm.IHeaders): Promise; - /** - * Makes a raw http request. - * All other methods such as get, post, patch, and request ultimately call this. - * Prefer get, del, post and patch - */ - request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: ifm.IHeaders): Promise; - /** - * Needs to be called if keepAlive is set to true in request options. - */ - dispose(): void; - /** - * Raw request. - * @param info - * @param data - */ - requestRaw(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream): Promise; - /** - * Raw request with callback. - * @param info - * @param data - * @param onResult - */ - requestRawWithCallback(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: ifm.IHttpClientResponse) => void): void; - private _prepareRequest(method, requestUrl, headers); - private _isPresigned(requestUrl); - private _mergeHeaders(headers); - private _getAgent(requestUrl); - private _getProxy(requestUrl); - private _isBypassProxy(requestUrl); - private _performExponentialBackoff(retryNumber); -} +/// +import url = require("url"); +import http = require("http"); +import ifm = require('./Interfaces'); +export declare enum HttpCodes { + OK = 200, + MultipleChoices = 300, + MovedPermanently = 301, + ResourceMoved = 302, + SeeOther = 303, + NotModified = 304, + UseProxy = 305, + SwitchProxy = 306, + TemporaryRedirect = 307, + PermanentRedirect = 308, + BadRequest = 400, + Unauthorized = 401, + PaymentRequired = 402, + Forbidden = 403, + NotFound = 404, + MethodNotAllowed = 405, + NotAcceptable = 406, + ProxyAuthenticationRequired = 407, + RequestTimeout = 408, + Conflict = 409, + Gone = 410, + TooManyRequests = 429, + InternalServerError = 500, + NotImplemented = 501, + BadGateway = 502, + ServiceUnavailable = 503, + GatewayTimeout = 504 +} +export declare class HttpClientResponse implements ifm.IHttpClientResponse { + constructor(message: http.IncomingMessage); + message: http.IncomingMessage; + readBody(): Promise; +} +export interface RequestInfo { + options: http.RequestOptions; + parsedUrl: url.Url; + httpModule: any; +} +export declare function isHttps(requestUrl: string): boolean; +export declare class HttpClient implements ifm.IHttpClient { + userAgent: string | null | undefined; + handlers: ifm.IRequestHandler[]; + requestOptions: ifm.IRequestOptions; + private _ignoreSslError; + private _socketTimeout; + private _httpProxy; + private _httpProxyBypassHosts; + private _allowRedirects; + private _allowRedirectDowngrade; + private _maxRedirects; + private _allowRetries; + private _maxRetries; + private _agent; + private _proxyAgent; + private _keepAlive; + private _disposed; + private _certConfig; + private _ca; + private _cert; + private _key; + constructor(userAgent: string | null | undefined, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions); + options(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; + get(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; + del(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; + post(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise; + patch(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise; + put(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise; + head(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise; + sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: ifm.IHeaders): Promise; + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: ifm.IHeaders): Promise; + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose(): void; + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream): Promise; + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: ifm.IHttpClientResponse) => void): void; + private _prepareRequest; + private _isPresigned; + private _mergeHeaders; + private _getAgent; + private _getProxy; + private _isMatchInBypassProxyList; + private _performExponentialBackoff; +} diff --git a/node_modules/typed-rest-client/HttpClient.js b/node_modules/typed-rest-client/HttpClient.js index 169b8f7..8fdd561 100644 --- a/node_modules/typed-rest-client/HttpClient.js +++ b/node_modules/typed-rest-client/HttpClient.js @@ -1,455 +1,497 @@ -"use strict"; -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const url = require("url"); -const http = require("http"); -const https = require("https"); -let fs; -let tunnel; -var HttpCodes; -(function (HttpCodes) { - HttpCodes[HttpCodes["OK"] = 200] = "OK"; - HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; - HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; - HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; - HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; - HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; - HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; - HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; - HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; - HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; - HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; - HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; - HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; - HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; - HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; - HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; - HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; - HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; - HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; - HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; - HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; - HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; - HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; - HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; - HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; - HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; -})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); -const HttpRedirectCodes = [HttpCodes.MovedPermanently, HttpCodes.ResourceMoved, HttpCodes.SeeOther, HttpCodes.TemporaryRedirect, HttpCodes.PermanentRedirect]; -const HttpResponseRetryCodes = [HttpCodes.BadGateway, HttpCodes.ServiceUnavailable, HttpCodes.GatewayTimeout]; -const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; -const ExponentialBackoffCeiling = 10; -const ExponentialBackoffTimeSlice = 5; -class HttpClientResponse { - constructor(message) { - this.message = message; - } - readBody() { - return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { - let output = ''; - this.message.on('data', (chunk) => { - output += chunk; - }); - this.message.on('end', () => { - resolve(output); - }); - })); - } -} -exports.HttpClientResponse = HttpClientResponse; -function isHttps(requestUrl) { - let parsedUrl = url.parse(requestUrl); - return parsedUrl.protocol === 'https:'; -} -exports.isHttps = isHttps; -var EnvironmentVariables; -(function (EnvironmentVariables) { - EnvironmentVariables["HTTP_PROXY"] = "HTTP_PROXY"; - EnvironmentVariables["HTTPS_PROXY"] = "HTTPS_PROXY"; -})(EnvironmentVariables || (EnvironmentVariables = {})); -class HttpClient { - constructor(userAgent, handlers, requestOptions) { - this._ignoreSslError = false; - this._allowRedirects = true; - this._maxRedirects = 50; - this._allowRetries = false; - this._maxRetries = 1; - this._keepAlive = false; - this._disposed = false; - this.userAgent = userAgent; - this.handlers = handlers || []; - this.requestOptions = requestOptions; - if (requestOptions) { - if (requestOptions.ignoreSslError != null) { - this._ignoreSslError = requestOptions.ignoreSslError; - } - this._socketTimeout = requestOptions.socketTimeout; - this._httpProxy = requestOptions.proxy; - if (requestOptions.proxy && requestOptions.proxy.proxyBypassHosts) { - this._httpProxyBypassHosts = []; - requestOptions.proxy.proxyBypassHosts.forEach(bypass => { - this._httpProxyBypassHosts.push(new RegExp(bypass, 'i')); - }); - } - this._certConfig = requestOptions.cert; - if (this._certConfig) { - // If using cert, need fs - fs = require('fs'); - // cache the cert content into memory, so we don't have to read it from disk every time - if (this._certConfig.caFile && fs.existsSync(this._certConfig.caFile)) { - this._ca = fs.readFileSync(this._certConfig.caFile, 'utf8'); - } - if (this._certConfig.certFile && fs.existsSync(this._certConfig.certFile)) { - this._cert = fs.readFileSync(this._certConfig.certFile, 'utf8'); - } - if (this._certConfig.keyFile && fs.existsSync(this._certConfig.keyFile)) { - this._key = fs.readFileSync(this._certConfig.keyFile, 'utf8'); - } - } - if (requestOptions.allowRedirects != null) { - this._allowRedirects = requestOptions.allowRedirects; - } - if (requestOptions.maxRedirects != null) { - this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); - } - if (requestOptions.keepAlive != null) { - this._keepAlive = requestOptions.keepAlive; - } - if (requestOptions.allowRetries != null) { - this._allowRetries = requestOptions.allowRetries; - } - if (requestOptions.maxRetries != null) { - this._maxRetries = requestOptions.maxRetries; - } - } - } - options(requestUrl, additionalHeaders) { - return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); - } - get(requestUrl, additionalHeaders) { - return this.request('GET', requestUrl, null, additionalHeaders || {}); - } - del(requestUrl, additionalHeaders) { - return this.request('DELETE', requestUrl, null, additionalHeaders || {}); - } - post(requestUrl, data, additionalHeaders) { - return this.request('POST', requestUrl, data, additionalHeaders || {}); - } - patch(requestUrl, data, additionalHeaders) { - return this.request('PATCH', requestUrl, data, additionalHeaders || {}); - } - put(requestUrl, data, additionalHeaders) { - return this.request('PUT', requestUrl, data, additionalHeaders || {}); - } - head(requestUrl, additionalHeaders) { - return this.request('HEAD', requestUrl, null, additionalHeaders || {}); - } - sendStream(verb, requestUrl, stream, additionalHeaders) { - return this.request(verb, requestUrl, stream, additionalHeaders); - } - /** - * Makes a raw http request. - * All other methods such as get, post, patch, and request ultimately call this. - * Prefer get, del, post and patch - */ - request(verb, requestUrl, data, headers) { - return __awaiter(this, void 0, void 0, function* () { - if (this._disposed) { - throw new Error("Client has already been disposed."); - } - let info = this._prepareRequest(verb, requestUrl, headers); - // Only perform retries on reads since writes may not be idempotent. - let maxTries = (this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1) ? this._maxRetries + 1 : 1; - let numTries = 0; - let response; - while (numTries < maxTries) { - response = yield this.requestRaw(info, data); - // Check if it's an authentication challenge - if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { - let authenticationHandler; - for (let i = 0; i < this.handlers.length; i++) { - if (this.handlers[i].canHandleAuthentication(response)) { - authenticationHandler = this.handlers[i]; - break; - } - } - if (authenticationHandler) { - return authenticationHandler.handleAuthentication(this, info, data); - } - else { - // We have received an unauthorized response but have no handlers to handle it. - // Let the response return to the caller. - return response; - } - } - let redirectsRemaining = this._maxRedirects; - while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 - && this._allowRedirects - && redirectsRemaining > 0) { - const redirectUrl = response.message.headers["location"]; - if (!redirectUrl) { - // if there's no location to redirect to, we won't - break; - } - // we need to finish reading the response before reassigning response - // which will leak the open socket. - yield response.readBody(); - // let's make the request with the new redirectUrl - info = this._prepareRequest(verb, redirectUrl, headers); - response = yield this.requestRaw(info, data); - redirectsRemaining--; - } - if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { - // If not a retry code, return immediately instead of retrying - return response; - } - numTries += 1; - if (numTries < maxTries) { - yield response.readBody(); - yield this._performExponentialBackoff(numTries); - } - } - return response; - }); - } - /** - * Needs to be called if keepAlive is set to true in request options. - */ - dispose() { - if (this._agent) { - this._agent.destroy(); - } - this._disposed = true; - } - /** - * Raw request. - * @param info - * @param data - */ - requestRaw(info, data) { - return new Promise((resolve, reject) => { - let callbackForResult = function (err, res) { - if (err) { - reject(err); - } - resolve(res); - }; - this.requestRawWithCallback(info, data, callbackForResult); - }); - } - /** - * Raw request with callback. - * @param info - * @param data - * @param onResult - */ - requestRawWithCallback(info, data, onResult) { - let socket; - let isDataString = typeof (data) === 'string'; - if (typeof (data) === 'string') { - info.options.headers["Content-Length"] = Buffer.byteLength(data, 'utf8'); - } - let callbackCalled = false; - let handleResult = (err, res) => { - if (!callbackCalled) { - callbackCalled = true; - onResult(err, res); - } - }; - let req = info.httpModule.request(info.options, (msg) => { - let res = new HttpClientResponse(msg); - handleResult(null, res); - }); - req.on('socket', (sock) => { - socket = sock; - }); - // If we ever get disconnected, we want the socket to timeout eventually - req.setTimeout(this._socketTimeout || 3 * 60000, () => { - if (socket) { - socket.end(); - } - handleResult(new Error('Request timeout: ' + info.options.path), null); - }); - req.on('error', function (err) { - // err has statusCode property - // res should have headers - handleResult(err, null); - }); - if (data && typeof (data) === 'string') { - req.write(data, 'utf8'); - } - if (data && typeof (data) !== 'string') { - data.on('close', function () { - req.end(); - }); - data.pipe(req); - } - else { - req.end(); - } - } - _prepareRequest(method, requestUrl, headers) { - const info = {}; - info.parsedUrl = url.parse(requestUrl); - const usingSsl = info.parsedUrl.protocol === 'https:'; - info.httpModule = usingSsl ? https : http; - const defaultPort = usingSsl ? 443 : 80; - info.options = {}; - info.options.host = info.parsedUrl.hostname; - info.options.port = info.parsedUrl.port ? parseInt(info.parsedUrl.port) : defaultPort; - info.options.path = (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); - info.options.method = method; - info.options.headers = this._mergeHeaders(headers); - info.options.headers["user-agent"] = this.userAgent; - info.options.agent = this._getAgent(requestUrl); - // gives handlers an opportunity to participate - if (this.handlers && !this._isPresigned(requestUrl)) { - this.handlers.forEach((handler) => { - handler.prepareRequest(info.options); - }); - } - return info; - } - _isPresigned(requestUrl) { - if (this.requestOptions && this.requestOptions.presignedUrlPatterns) { - const patterns = this.requestOptions.presignedUrlPatterns; - for (let i = 0; i < patterns.length; i++) { - if (requestUrl.match(patterns[i])) { - return true; - } - } - } - return false; - } - _mergeHeaders(headers) { - const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); - if (this.requestOptions && this.requestOptions.headers) { - return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); - } - return lowercaseKeys(headers || {}); - } - _getAgent(requestUrl) { - let agent; - let proxy = this._getProxy(requestUrl); - let useProxy = proxy.proxyUrl && proxy.proxyUrl.hostname && !this._isBypassProxy(requestUrl); - if (this._keepAlive && useProxy) { - agent = this._proxyAgent; - } - if (this._keepAlive && !useProxy) { - agent = this._agent; - } - // if agent is already assigned use that agent. - if (!!agent) { - return agent; - } - let parsedUrl = url.parse(requestUrl); - const usingSsl = parsedUrl.protocol === 'https:'; - let maxSockets = 100; - if (!!this.requestOptions) { - maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; - } - if (useProxy) { - // If using proxy, need tunnel - if (!tunnel) { - tunnel = require('tunnel'); - } - const agentOptions = { - maxSockets: maxSockets, - keepAlive: this._keepAlive, - proxy: { - proxyAuth: proxy.proxyAuth, - host: proxy.proxyUrl.hostname, - port: proxy.proxyUrl.port - }, - }; - let tunnelAgent; - const overHttps = proxy.proxyUrl.protocol === 'https:'; - if (usingSsl) { - tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; - } - else { - tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; - } - agent = tunnelAgent(agentOptions); - this._proxyAgent = agent; - } - // if reusing agent across request and tunneling agent isn't assigned create a new agent - if (this._keepAlive && !agent) { - const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; - agent = usingSsl ? new https.Agent(options) : new http.Agent(options); - this._agent = agent; - } - // if not using private agent and tunnel agent isn't setup then use global agent - if (!agent) { - agent = usingSsl ? https.globalAgent : http.globalAgent; - } - if (usingSsl && this._ignoreSslError) { - // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process - // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options - // we have to cast it to any and change it directly - agent.options = Object.assign(agent.options || {}, { rejectUnauthorized: false }); - } - if (usingSsl && this._certConfig) { - agent.options = Object.assign(agent.options || {}, { ca: this._ca, cert: this._cert, key: this._key, passphrase: this._certConfig.passphrase }); - } - return agent; - } - _getProxy(requestUrl) { - const parsedUrl = url.parse(requestUrl); - let usingSsl = parsedUrl.protocol === 'https:'; - let proxyConfig = this._httpProxy; - // fallback to http_proxy and https_proxy env - let https_proxy = process.env[EnvironmentVariables.HTTPS_PROXY]; - let http_proxy = process.env[EnvironmentVariables.HTTP_PROXY]; - if (!proxyConfig) { - if (https_proxy && usingSsl) { - proxyConfig = { - proxyUrl: https_proxy - }; - } - else if (http_proxy) { - proxyConfig = { - proxyUrl: http_proxy - }; - } - } - let proxyUrl; - let proxyAuth; - if (proxyConfig) { - if (proxyConfig.proxyUrl.length > 0) { - proxyUrl = url.parse(proxyConfig.proxyUrl); - } - if (proxyConfig.proxyUsername || proxyConfig.proxyPassword) { - proxyAuth = proxyConfig.proxyUsername + ":" + proxyConfig.proxyPassword; - } - } - return { proxyUrl: proxyUrl, proxyAuth: proxyAuth }; - } - _isBypassProxy(requestUrl) { - if (!this._httpProxyBypassHosts) { - return false; - } - let bypass = false; - this._httpProxyBypassHosts.forEach(bypassHost => { - if (bypassHost.test(requestUrl)) { - bypass = true; - } - }); - return bypass; - } - _performExponentialBackoff(retryNumber) { - retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); - const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); - return new Promise(resolve => setTimeout(() => resolve(), ms)); - } -} -exports.HttpClient = HttpClient; +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const url = require("url"); +const http = require("http"); +const https = require("https"); +const util = require("./Util"); +let fs; +let tunnel; +var HttpCodes; +(function (HttpCodes) { + HttpCodes[HttpCodes["OK"] = 200] = "OK"; + HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; + HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; + HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; + HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; + HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; + HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; + HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; + HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; + HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; + HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); +const HttpRedirectCodes = [HttpCodes.MovedPermanently, HttpCodes.ResourceMoved, HttpCodes.SeeOther, HttpCodes.TemporaryRedirect, HttpCodes.PermanentRedirect]; +const HttpResponseRetryCodes = [HttpCodes.BadGateway, HttpCodes.ServiceUnavailable, HttpCodes.GatewayTimeout]; +const NetworkRetryErrors = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED']; +const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; +const ExponentialBackoffCeiling = 10; +const ExponentialBackoffTimeSlice = 5; +class HttpClientResponse { + constructor(message) { + this.message = message; + } + readBody() { + return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + let buffer = Buffer.alloc(0); + const encodingCharset = util.obtainContentCharset(this); + // Extract Encoding from header: 'content-encoding' + // Match `gzip`, `gzip, deflate` variations of GZIP encoding + const contentEncoding = this.message.headers['content-encoding'] || ''; + const isGzippedEncoded = new RegExp('(gzip$)|(gzip, *deflate)').test(contentEncoding); + this.message.on('data', function (data) { + const chunk = (typeof data === 'string') ? Buffer.from(data, encodingCharset) : data; + buffer = Buffer.concat([buffer, chunk]); + }).on('end', function () { + return __awaiter(this, void 0, void 0, function* () { + if (isGzippedEncoded) { // Process GZipped Response Body HERE + const gunzippedBody = yield util.decompressGzippedContent(buffer, encodingCharset); + resolve(gunzippedBody); + } + else { + resolve(buffer.toString(encodingCharset)); + } + }); + }).on('error', function (err) { + reject(err); + }); + })); + } +} +exports.HttpClientResponse = HttpClientResponse; +function isHttps(requestUrl) { + let parsedUrl = url.parse(requestUrl); + return parsedUrl.protocol === 'https:'; +} +exports.isHttps = isHttps; +var EnvironmentVariables; +(function (EnvironmentVariables) { + EnvironmentVariables["HTTP_PROXY"] = "HTTP_PROXY"; + EnvironmentVariables["HTTPS_PROXY"] = "HTTPS_PROXY"; + EnvironmentVariables["NO_PROXY"] = "NO_PROXY"; +})(EnvironmentVariables || (EnvironmentVariables = {})); +class HttpClient { + constructor(userAgent, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._allowRedirectDowngrade = false; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = userAgent; + this.handlers = handlers || []; + let no_proxy = process.env[EnvironmentVariables.NO_PROXY]; + if (no_proxy) { + this._httpProxyBypassHosts = []; + no_proxy.split(',').forEach(bypass => { + this._httpProxyBypassHosts.push(new RegExp(bypass, 'i')); + }); + } + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; + } + this._socketTimeout = requestOptions.socketTimeout; + this._httpProxy = requestOptions.proxy; + if (requestOptions.proxy && requestOptions.proxy.proxyBypassHosts) { + this._httpProxyBypassHosts = []; + requestOptions.proxy.proxyBypassHosts.forEach(bypass => { + this._httpProxyBypassHosts.push(new RegExp(bypass, 'i')); + }); + } + this._certConfig = requestOptions.cert; + if (this._certConfig) { + // If using cert, need fs + fs = require('fs'); + // cache the cert content into memory, so we don't have to read it from disk every time + if (this._certConfig.caFile && fs.existsSync(this._certConfig.caFile)) { + this._ca = fs.readFileSync(this._certConfig.caFile, 'utf8'); + } + if (this._certConfig.certFile && fs.existsSync(this._certConfig.certFile)) { + this._cert = fs.readFileSync(this._certConfig.certFile, 'utf8'); + } + if (this._certConfig.keyFile && fs.existsSync(this._certConfig.keyFile)) { + this._key = fs.readFileSync(this._certConfig.keyFile, 'utf8'); + } + } + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.allowRedirectDowngrade != null) { + this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; + } + } + } + options(requestUrl, additionalHeaders) { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); + } + get(requestUrl, additionalHeaders) { + return this.request('GET', requestUrl, null, additionalHeaders || {}); + } + del(requestUrl, additionalHeaders) { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); + } + post(requestUrl, data, additionalHeaders) { + return this.request('POST', requestUrl, data, additionalHeaders || {}); + } + patch(requestUrl, data, additionalHeaders) { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); + } + put(requestUrl, data, additionalHeaders) { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); + } + head(requestUrl, additionalHeaders) { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); + } + sendStream(verb, requestUrl, stream, additionalHeaders) { + return this.request(verb, requestUrl, stream, additionalHeaders); + } + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + request(verb, requestUrl, data, headers) { + return __awaiter(this, void 0, void 0, function* () { + if (this._disposed) { + throw new Error("Client has already been disposed."); + } + let parsedUrl = url.parse(requestUrl); + let info = this._prepareRequest(verb, parsedUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + let maxTries = (this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1) ? this._maxRetries + 1 : 1; + let numTries = 0; + let response; + while (numTries < maxTries) { + try { + response = yield this.requestRaw(info, data); + } + catch (err) { + if (err && err.code && NetworkRetryErrors.indexOf(err.code) > -1) { + continue; + } + throw err; + } + // Check if it's an authentication challenge + if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (let i = 0; i < this.handlers.length; i++) { + if (this.handlers[i].canHandleAuthentication(response)) { + authenticationHandler = this.handlers[i]; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info, data); + } + else { + // We have received an unauthorized response but have no handlers to handle it. + // Let the response return to the caller. + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 + && this._allowRedirects + && redirectsRemaining > 0) { + const redirectUrl = response.message.headers["location"]; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + let parsedRedirectUrl = url.parse(redirectUrl); + if (parsedUrl.protocol == 'https:' && parsedUrl.protocol != parsedRedirectUrl.protocol && !this._allowRedirectDowngrade) { + throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true."); + } + // we need to finish reading the response before reassigning response + // which will leak the open socket. + yield response.readBody(); + // let's make the request with the new redirectUrl + info = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = yield this.requestRaw(info, data); + redirectsRemaining--; + } + if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { + // If not a retry code, return immediately instead of retrying + return response; + } + numTries += 1; + if (numTries < maxTries) { + yield response.readBody(); + yield this._performExponentialBackoff(numTries); + } + } + return response; + }); + } + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); + } + this._disposed = true; + } + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info, data) { + return new Promise((resolve, reject) => { + let callbackForResult = function (err, res) { + if (err) { + reject(err); + } + resolve(res); + }; + this.requestRawWithCallback(info, data, callbackForResult); + }); + } + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info, data, onResult) { + let socket; + if (typeof (data) === 'string') { + info.options.headers["Content-Length"] = Buffer.byteLength(data, 'utf8'); + } + let callbackCalled = false; + let handleResult = (err, res) => { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + }; + let req = info.httpModule.request(info.options, (msg) => { + let res = new HttpClientResponse(msg); + handleResult(null, res); + }); + req.on('socket', (sock) => { + socket = sock; + }); + // If we ever get disconnected, we want the socket to timeout eventually + req.setTimeout(this._socketTimeout || 3 * 60000, () => { + if (socket) { + socket.destroy(); + } + handleResult(new Error('Request timeout: ' + info.options.path), null); + }); + req.on('error', function (err) { + // err has statusCode property + // res should have headers + handleResult(err, null); + }); + if (data && typeof (data) === 'string') { + req.write(data, 'utf8'); + } + if (data && typeof (data) !== 'string') { + data.on('close', function () { + req.end(); + }); + data.pipe(req); + } + else { + req.end(); + } + } + _prepareRequest(method, requestUrl, headers) { + const info = {}; + info.parsedUrl = requestUrl; + const usingSsl = info.parsedUrl.protocol === 'https:'; + info.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info.options = {}; + info.options.host = info.parsedUrl.hostname; + info.options.port = info.parsedUrl.port ? parseInt(info.parsedUrl.port) : defaultPort; + info.options.path = (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); + info.options.method = method; + info.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info.options.headers["user-agent"] = this.userAgent; + } + info.options.agent = this._getAgent(info.parsedUrl); + // gives handlers an opportunity to participate + if (this.handlers && !this._isPresigned(url.format(requestUrl))) { + this.handlers.forEach((handler) => { + handler.prepareRequest(info.options); + }); + } + return info; + } + _isPresigned(requestUrl) { + if (this.requestOptions && this.requestOptions.presignedUrlPatterns) { + const patterns = this.requestOptions.presignedUrlPatterns; + for (let i = 0; i < patterns.length; i++) { + if (requestUrl.match(patterns[i])) { + return true; + } + } + } + return false; + } + _mergeHeaders(headers) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); + } + return lowercaseKeys(headers || {}); + } + _getAgent(parsedUrl) { + let agent; + let proxy = this._getProxy(parsedUrl); + let useProxy = proxy.proxyUrl && proxy.proxyUrl.hostname && !this._isMatchInBypassProxyList(parsedUrl); + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (this._keepAlive && !useProxy) { + agent = this._agent; + } + // if agent is already assigned use that agent. + if (!!agent) { + return agent; + } + const usingSsl = parsedUrl.protocol === 'https:'; + let maxSockets = 100; + if (!!this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; + } + if (useProxy) { + // If using proxy, need tunnel + if (!tunnel) { + tunnel = require('tunnel'); + } + const agentOptions = { + maxSockets: maxSockets, + keepAlive: this._keepAlive, + proxy: { + proxyAuth: proxy.proxyAuth, + host: proxy.proxyUrl.hostname, + port: proxy.proxyUrl.port + }, + }; + let tunnelAgent; + const overHttps = proxy.proxyUrl.protocol === 'https:'; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; + } + else { + tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; + } + // if reusing agent across request and tunneling agent isn't assigned create a new agent + if (this._keepAlive && !agent) { + const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; + } + // if not using private agent and tunnel agent isn't setup then use global agent + if (!agent) { + agent = usingSsl ? https.globalAgent : http.globalAgent; + } + if (usingSsl && this._ignoreSslError) { + // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process + // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options + // we have to cast it to any and change it directly + agent.options = Object.assign(agent.options || {}, { rejectUnauthorized: false }); + } + if (usingSsl && this._certConfig) { + agent.options = Object.assign(agent.options || {}, { ca: this._ca, cert: this._cert, key: this._key, passphrase: this._certConfig.passphrase }); + } + return agent; + } + _getProxy(parsedUrl) { + let usingSsl = parsedUrl.protocol === 'https:'; + let proxyConfig = this._httpProxy; + // fallback to http_proxy and https_proxy env + let https_proxy = process.env[EnvironmentVariables.HTTPS_PROXY]; + let http_proxy = process.env[EnvironmentVariables.HTTP_PROXY]; + if (!proxyConfig) { + if (https_proxy && usingSsl) { + proxyConfig = { + proxyUrl: https_proxy + }; + } + else if (http_proxy) { + proxyConfig = { + proxyUrl: http_proxy + }; + } + } + let proxyUrl; + let proxyAuth; + if (proxyConfig) { + if (proxyConfig.proxyUrl.length > 0) { + proxyUrl = url.parse(proxyConfig.proxyUrl); + } + if (proxyConfig.proxyUsername || proxyConfig.proxyPassword) { + proxyAuth = proxyConfig.proxyUsername + ":" + proxyConfig.proxyPassword; + } + } + return { proxyUrl: proxyUrl, proxyAuth: proxyAuth }; + } + _isMatchInBypassProxyList(parsedUrl) { + if (!this._httpProxyBypassHosts) { + return false; + } + let bypass = false; + this._httpProxyBypassHosts.forEach(bypassHost => { + if (bypassHost.test(parsedUrl.href)) { + bypass = true; + } + }); + return bypass; + } + _performExponentialBackoff(retryNumber) { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); + } +} +exports.HttpClient = HttpClient; diff --git a/node_modules/typed-rest-client/Index.d.ts b/node_modules/typed-rest-client/Index.d.ts index e69de29..509db18 100644 --- a/node_modules/typed-rest-client/Index.d.ts +++ b/node_modules/typed-rest-client/Index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/typed-rest-client/Index.js b/node_modules/typed-rest-client/Index.js index c8ad2e5..ce03781 100644 --- a/node_modules/typed-rest-client/Index.js +++ b/node_modules/typed-rest-client/Index.js @@ -1,2 +1,2 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/node_modules/typed-rest-client/Interfaces.d.ts b/node_modules/typed-rest-client/Interfaces.d.ts index 5900e26..a497160 100644 --- a/node_modules/typed-rest-client/Interfaces.d.ts +++ b/node_modules/typed-rest-client/Interfaces.d.ts @@ -1,62 +1,74 @@ -/// -import http = require("http"); -import url = require("url"); -export interface IHeaders { - [key: string]: any; -} -export interface IBasicCredentials { - username: string; - password: string; -} -export interface IHttpClient { - options(requestUrl: string, additionalHeaders?: IHeaders): Promise; - get(requestUrl: string, additionalHeaders?: IHeaders): Promise; - del(requestUrl: string, additionalHeaders?: IHeaders): Promise; - post(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise; - patch(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise; - put(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise; - sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: IHeaders): Promise; - request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: IHeaders): Promise; - requestRaw(info: IRequestInfo, data: string | NodeJS.ReadableStream): Promise; - requestRawWithCallback(info: IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: IHttpClientResponse) => void): void; -} -export interface IRequestHandler { - prepareRequest(options: http.RequestOptions): void; - canHandleAuthentication(response: IHttpClientResponse): boolean; - handleAuthentication(httpClient: IHttpClient, requestInfo: IRequestInfo, objs: any): Promise; -} -export interface IHttpClientResponse { - message: http.IncomingMessage; - readBody(): Promise; -} -export interface IRequestInfo { - options: http.RequestOptions; - parsedUrl: url.Url; - httpModule: any; -} -export interface IRequestOptions { - headers?: IHeaders; - socketTimeout?: number; - ignoreSslError?: boolean; - proxy?: IProxyConfiguration; - cert?: ICertConfiguration; - allowRedirects?: boolean; - maxRedirects?: number; - maxSockets?: number; - keepAlive?: boolean; - presignedUrlPatterns?: RegExp[]; - allowRetries?: boolean; - maxRetries?: number; -} -export interface IProxyConfiguration { - proxyUrl: string; - proxyUsername?: string; - proxyPassword?: string; - proxyBypassHosts?: string[]; -} -export interface ICertConfiguration { - caFile?: string; - certFile?: string; - keyFile?: string; - passphrase?: string; -} +/// +import http = require("http"); +import url = require("url"); +export interface IHeaders { + [key: string]: any; +} +export interface IBasicCredentials { + username: string; + password: string; +} +export interface IHttpClient { + options(requestUrl: string, additionalHeaders?: IHeaders): Promise; + get(requestUrl: string, additionalHeaders?: IHeaders): Promise; + del(requestUrl: string, additionalHeaders?: IHeaders): Promise; + post(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise; + patch(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise; + put(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise; + sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: IHeaders): Promise; + request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: IHeaders): Promise; + requestRaw(info: IRequestInfo, data: string | NodeJS.ReadableStream): Promise; + requestRawWithCallback(info: IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: IHttpClientResponse) => void): void; +} +export interface IRequestHandler { + prepareRequest(options: http.RequestOptions): void; + canHandleAuthentication(response: IHttpClientResponse): boolean; + handleAuthentication(httpClient: IHttpClient, requestInfo: IRequestInfo, objs: any): Promise; +} +export interface IHttpClientResponse { + message: http.IncomingMessage; + readBody(): Promise; +} +export interface IRequestInfo { + options: http.RequestOptions; + parsedUrl: url.Url; + httpModule: any; +} +export interface IRequestOptions { + headers?: IHeaders; + socketTimeout?: number; + ignoreSslError?: boolean; + proxy?: IProxyConfiguration; + cert?: ICertConfiguration; + allowRedirects?: boolean; + allowRedirectDowngrade?: boolean; + maxRedirects?: number; + maxSockets?: number; + keepAlive?: boolean; + presignedUrlPatterns?: RegExp[]; + allowRetries?: boolean; + maxRetries?: number; +} +export interface IProxyConfiguration { + proxyUrl: string; + proxyUsername?: string; + proxyPassword?: string; + proxyBypassHosts?: string[]; +} +export interface ICertConfiguration { + caFile?: string; + certFile?: string; + keyFile?: string; + passphrase?: string; +} +export interface IRequestQueryParams { + options?: { + separator?: string; + arrayFormat?: string; + shouldAllowDots?: boolean; + shouldOnlyEncodeValues?: boolean; + }; + params: { + [name: string]: string | number | (string | number)[]; + }; +} diff --git a/node_modules/typed-rest-client/Interfaces.js b/node_modules/typed-rest-client/Interfaces.js index 2bc6be2..6b2bf36 100644 --- a/node_modules/typed-rest-client/Interfaces.js +++ b/node_modules/typed-rest-client/Interfaces.js @@ -1,5 +1,5 @@ -"use strict"; -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -Object.defineProperty(exports, "__esModule", { value: true }); -; +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +; diff --git a/node_modules/typed-rest-client/LICENSE b/node_modules/typed-rest-client/LICENSE index 8cddf7e..0f14def 100644 --- a/node_modules/typed-rest-client/LICENSE +++ b/node_modules/typed-rest-client/LICENSE @@ -1,21 +1,39 @@ -Typed Rest Client for Node.js - -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Typed Rest Client for Node.js + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +/* Node-SMB/ntlm + * https://github.com/Node-SMB/ntlm + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Copyright (C) 2012 Joshua M. Clulow + */ diff --git a/node_modules/typed-rest-client/README.md b/node_modules/typed-rest-client/README.md index 0c2b768..97ded3a 100644 --- a/node_modules/typed-rest-client/README.md +++ b/node_modules/typed-rest-client/README.md @@ -1,100 +1,110 @@ -[![Build Status](https://dev.azure.com/ms/typed-rest-client/_apis/build/status/Microsoft.typed-rest-client?branchName=master)](https://dev.azure.com/ms/typed-rest-client/_build/latest?definitionId=42&branchName=master) - -# Typed REST and HTTP Client with TypeScript Typings - -A lightweight REST and HTTP client optimized for use with TypeScript with generics and async await. - -## Features - - - REST and HTTP client with TypeScript generics and async/await/Promises - - Typings included so no need to acquire separately (great for intellisense and no versioning drift) - - Basic, Bearer and NTLM Support out of the box. Extensible handlers for others. - - Proxy support - - Certificate support (Self-signed server and client cert) - - Redirects supported - -Intellisense and compile support: - -![intellisense](./docs/intellisense.png) - -## Install - -``` -npm install typed-rest-client --save -``` - -Or to install the latest preview: -``` -npm install typed-rest-client@preview --save -``` - -## Samples - -See the [samples](./samples) for complete coding examples. Also see the [REST](./test/tests/resttests.ts) and [HTTP](./test/tests/httptests.ts) tests for detailed examples. - -## Errors - -### HTTP - -The HTTP client does not throw unless truly exceptional. - -* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body. -* Redirects (3xx) will be followed by default. - - -See [HTTP tests](./test/tests/httptests.ts) for detailed examples. - -### REST - -The REST client is a high-level client which uses the HTTP client. Its responsibility is to turn a body into a typed resource object. - -* A 200 will be success. -* Redirects (3xx) will be followed. -* A 404 will not throw but the result object will be null and the result statusCode will be set. -* Other 4xx and 5xx errors will throw. The status code will be attached to the error object. If a RESTful error object is returned (`{ message: xxx}`), then the error message will be that. Otherwise, it will be a generic, `Failed Request: (xxx)`. - -See [REST tests](./test/tests/resttests.ts) for detailed examples. - -## Debugging - -To enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible: - -``` -export NODE_DEBUG=http -``` - -or - -``` -set NODE_DEBUG=http -``` - - - -## Node support - -The typed-rest-client is built using the latest LTS version of Node 8. We also support the latest LTS for Node 4 and Node 6. - -## Contributing - -To contribute to this repository, see the [contribution guide](./CONTRIBUTING.md) - -To build: - -```bash -$ npm run build -``` - -To run all tests: -```bash -$ npm test -``` - -To just run unit tests: -```bash -$ npm run units -``` - -## Code of Conduct - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +GitHub Actions status + +[![Build Status](https://dev.azure.com/ms/typed-rest-client/_apis/build/status/Microsoft.typed-rest-client?branchName=master)](https://dev.azure.com/ms/typed-rest-client/_build/latest?definitionId=42&branchName=master) + + +# Typed REST and HTTP Client with TypeScript Typings + +A lightweight REST and HTTP client optimized for use with TypeScript with generics and async await. + +## Features + + - REST and HTTP client with TypeScript generics and async/await/Promises + - Typings included so no need to acquire separately (great for intellisense and no versioning drift) + - Basic, Bearer and NTLM Support out of the box. Extensible handlers for others. + - Proxy support + - Certificate support (Self-signed server and client cert) + - Redirects supported + +Intellisense and compile support: + +![intellisense](./docs/intellisense.png) + +## Install + +``` +npm install typed-rest-client --save +``` + +Or to install the latest preview: +``` +npm install typed-rest-client@preview --save +``` + +## Samples + +See the [samples](./samples) for complete coding examples. Also see the [REST](./test/tests/resttests.ts) and [HTTP](./test/tests/httptests.ts) tests for detailed examples. + +## Errors + +### HTTP + +The HTTP client does not throw unless truly exceptional. + +* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body. +* Redirects (3xx) will be followed by default. + + +See [HTTP tests](./test/tests/httptests.ts) for detailed examples. + +### REST + +The REST client is a high-level client which uses the HTTP client. Its responsibility is to turn a body into a typed resource object. + +* A 200 will be success. +* Redirects (3xx) will be followed. +* A 404 will not throw but the result object will be null and the result statusCode will be set. +* Other 4xx and 5xx errors will throw. The status code will be attached to the error object. If a RESTful error object is returned (`{ message: xxx}`), then the error message will be that. Otherwise, it will be a generic, `Failed Request: (xxx)`. + +See [REST tests](./test/tests/resttests.ts) for detailed examples. + +## Debugging + +To enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible: + +``` +export NODE_DEBUG=http +``` + +or + +``` +set NODE_DEBUG=http +``` + + + +## Node support + +The typed-rest-client is built using the latest LTS version of Node 8. We also support the latest LTS for Node 4 and Node 6. + +## Contributing + +To contribute to this repository, see the [contribution guide](./CONTRIBUTING.md) + +To build: + +```bash +$ npm run build +``` + +To run all tests: +```bash +$ npm test +``` + +To just run unit tests: +```bash +$ npm run units +``` + +## Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +## Security Issues + +Do you think there might be a security issue? +Have you been phished or identified a security vulnerability? +Please don't report it here - let us know by sending an email to secure@microsoft.com. diff --git a/node_modules/typed-rest-client/RestClient.d.ts b/node_modules/typed-rest-client/RestClient.d.ts index 74b33cb..446706c 100644 --- a/node_modules/typed-rest-client/RestClient.d.ts +++ b/node_modules/typed-rest-client/RestClient.d.ts @@ -1,77 +1,78 @@ -/// -import httpm = require('./HttpClient'); -import ifm = require("./Interfaces"); -export interface IRestResponse { - statusCode: number; - result: T | null; - headers: Object; -} -export interface IRequestOptions { - acceptHeader?: string; - additionalHeaders?: ifm.IHeaders; - responseProcessor?: Function; - deserializeDates?: boolean; -} -export declare class RestClient { - client: httpm.HttpClient; - versionParam: string; - /** - * Creates an instance of the RestClient - * @constructor - * @param {string} userAgent - userAgent for requests - * @param {string} baseUrl - (Optional) If not specified, use full urls per request. If supplied and a function passes a relative url, it will be appended to this - * @param {ifm.IRequestHandler[]} handlers - handlers are typically auth handlers (basic, bearer, ntlm supplied) - * @param {ifm.IRequestOptions} requestOptions - options for each http requests (http proxy setting, socket timeout) - */ - constructor(userAgent: string, baseUrl?: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions); - private _baseUrl; - /** - * Gets a resource from an endpoint - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} requestUrl - fully qualified or relative url - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - options(requestUrl: string, options?: IRequestOptions): Promise>; - /** - * Gets a resource from an endpoint - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} resource - fully qualified url or relative path - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - get(resource: string, options?: IRequestOptions): Promise>; - /** - * Deletes a resource from an endpoint - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} resource - fully qualified or relative url - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - del(resource: string, options?: IRequestOptions): Promise>; - /** - * Creates resource(s) from an endpoint - * T type of object returned. - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} resource - fully qualified or relative url - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - create(resource: string, resources: any, options?: IRequestOptions): Promise>; - /** - * Updates resource(s) from an endpoint - * T type of object returned. - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} resource - fully qualified or relative url - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - update(resource: string, resources: any, options?: IRequestOptions): Promise>; - /** - * Replaces resource(s) from an endpoint - * T type of object returned. - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} resource - fully qualified or relative url - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - replace(resource: string, resources: any, options?: IRequestOptions): Promise>; - uploadStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, options?: IRequestOptions): Promise>; - private _headersFromOptions(options, contentType?); - private static dateTimeDeserializer(key, value); - private _processResponse(res, options); -} +/// +import httpm = require('./HttpClient'); +import ifm = require("./Interfaces"); +export interface IRestResponse { + statusCode: number; + result: T | null; + headers: Object; +} +export interface IRequestOptions { + acceptHeader?: string; + additionalHeaders?: ifm.IHeaders; + responseProcessor?: Function; + deserializeDates?: boolean; + queryParameters?: ifm.IRequestQueryParams; +} +export declare class RestClient { + client: httpm.HttpClient; + versionParam: string; + /** + * Creates an instance of the RestClient + * @constructor + * @param {string} userAgent - userAgent for requests + * @param {string} baseUrl - (Optional) If not specified, use full urls per request. If supplied and a function passes a relative url, it will be appended to this + * @param {ifm.IRequestHandler[]} handlers - handlers are typically auth handlers (basic, bearer, ntlm supplied) + * @param {ifm.IRequestOptions} requestOptions - options for each http requests (http proxy setting, socket timeout) + */ + constructor(userAgent: string | null | undefined, baseUrl?: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions); + private _baseUrl; + /** + * Gets a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} requestUrl - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + options(requestUrl: string, options?: IRequestOptions): Promise>; + /** + * Gets a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified url or relative path + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + get(resource: string, options?: IRequestOptions): Promise>; + /** + * Deletes a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + del(resource: string, options?: IRequestOptions): Promise>; + /** + * Creates resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + create(resource: string, resources: any, options?: IRequestOptions): Promise>; + /** + * Updates resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + update(resource: string, resources: any, options?: IRequestOptions): Promise>; + /** + * Replaces resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + replace(resource: string, resources: any, options?: IRequestOptions): Promise>; + uploadStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, options?: IRequestOptions): Promise>; + private _headersFromOptions; + private static dateTimeDeserializer; + protected processResponse(res: httpm.HttpClientResponse, options: IRequestOptions): Promise>; +} diff --git a/node_modules/typed-rest-client/RestClient.js b/node_modules/typed-rest-client/RestClient.js index 1548b8f..7a79f99 100644 --- a/node_modules/typed-rest-client/RestClient.js +++ b/node_modules/typed-rest-client/RestClient.js @@ -1,217 +1,217 @@ -"use strict"; -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const httpm = require("./HttpClient"); -const util = require("./Util"); -class RestClient { - /** - * Creates an instance of the RestClient - * @constructor - * @param {string} userAgent - userAgent for requests - * @param {string} baseUrl - (Optional) If not specified, use full urls per request. If supplied and a function passes a relative url, it will be appended to this - * @param {ifm.IRequestHandler[]} handlers - handlers are typically auth handlers (basic, bearer, ntlm supplied) - * @param {ifm.IRequestOptions} requestOptions - options for each http requests (http proxy setting, socket timeout) - */ - constructor(userAgent, baseUrl, handlers, requestOptions) { - this.client = new httpm.HttpClient(userAgent, handlers, requestOptions); - if (baseUrl) { - this._baseUrl = baseUrl; - } - } - /** - * Gets a resource from an endpoint - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} requestUrl - fully qualified or relative url - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - options(requestUrl, options) { - return __awaiter(this, void 0, void 0, function* () { - let url = util.getUrl(requestUrl, this._baseUrl); - let res = yield this.client.options(url, this._headersFromOptions(options)); - return this._processResponse(res, options); - }); - } - /** - * Gets a resource from an endpoint - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} resource - fully qualified url or relative path - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - get(resource, options) { - return __awaiter(this, void 0, void 0, function* () { - let url = util.getUrl(resource, this._baseUrl); - let res = yield this.client.get(url, this._headersFromOptions(options)); - return this._processResponse(res, options); - }); - } - /** - * Deletes a resource from an endpoint - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} resource - fully qualified or relative url - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - del(resource, options) { - return __awaiter(this, void 0, void 0, function* () { - let url = util.getUrl(resource, this._baseUrl); - let res = yield this.client.del(url, this._headersFromOptions(options)); - return this._processResponse(res, options); - }); - } - /** - * Creates resource(s) from an endpoint - * T type of object returned. - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} resource - fully qualified or relative url - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - create(resource, resources, options) { - return __awaiter(this, void 0, void 0, function* () { - let url = util.getUrl(resource, this._baseUrl); - let headers = this._headersFromOptions(options, true); - let data = JSON.stringify(resources, null, 2); - let res = yield this.client.post(url, data, headers); - return this._processResponse(res, options); - }); - } - /** - * Updates resource(s) from an endpoint - * T type of object returned. - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} resource - fully qualified or relative url - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - update(resource, resources, options) { - return __awaiter(this, void 0, void 0, function* () { - let url = util.getUrl(resource, this._baseUrl); - let headers = this._headersFromOptions(options, true); - let data = JSON.stringify(resources, null, 2); - let res = yield this.client.patch(url, data, headers); - return this._processResponse(res, options); - }); - } - /** - * Replaces resource(s) from an endpoint - * T type of object returned. - * Be aware that not found returns a null. Other error conditions reject the promise - * @param {string} resource - fully qualified or relative url - * @param {IRequestOptions} requestOptions - (optional) requestOptions object - */ - replace(resource, resources, options) { - return __awaiter(this, void 0, void 0, function* () { - let url = util.getUrl(resource, this._baseUrl); - let headers = this._headersFromOptions(options, true); - let data = JSON.stringify(resources, null, 2); - let res = yield this.client.put(url, data, headers); - return this._processResponse(res, options); - }); - } - uploadStream(verb, requestUrl, stream, options) { - return __awaiter(this, void 0, void 0, function* () { - let url = util.getUrl(requestUrl, this._baseUrl); - let headers = this._headersFromOptions(options, true); - let res = yield this.client.sendStream(verb, url, stream, headers); - return this._processResponse(res, options); - }); - } - _headersFromOptions(options, contentType) { - options = options || {}; - let headers = options.additionalHeaders || {}; - headers["Accept"] = options.acceptHeader || "application/json"; - if (contentType) { - let found = false; - for (let header in headers) { - if (header.toLowerCase() == "content-type") { - found = true; - } - } - if (!found) { - headers["Content-Type"] = 'application/json; charset=utf-8'; - } - } - return headers; - } - static dateTimeDeserializer(key, value) { - if (typeof value === 'string') { - let a = new Date(value); - if (!isNaN(a.valueOf())) { - return a; - } - } - return value; - } - _processResponse(res, options) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { - const statusCode = res.message.statusCode; - const response = { - statusCode: statusCode, - result: null, - headers: {} - }; - // not found leads to null obj returned - if (statusCode == httpm.HttpCodes.NotFound) { - resolve(response); - } - let obj; - let contents; - // get the result from the body - try { - contents = yield res.readBody(); - if (contents && contents.length > 0) { - if (options && options.deserializeDates) { - obj = JSON.parse(contents, RestClient.dateTimeDeserializer); - } - else { - obj = JSON.parse(contents); - } - if (options && options.responseProcessor) { - response.result = options.responseProcessor(obj); - } - else { - response.result = obj; - } - } - response.headers = res.message.headers; - } - catch (err) { - // Invalid resource (contents not json); leaving result obj null - } - // note that 3xx redirects are handled by the http layer. - if (statusCode > 299) { - let msg; - // if exception/error in body, attempt to get better error - if (obj && obj.message) { - msg = obj.message; - } - else if (contents && contents.length > 0) { - // it may be the case that the exception is in the body message as string - msg = contents; - } - else { - msg = "Failed request: (" + statusCode + ")"; - } - let err = new Error(msg); - // attach statusCode and body obj (if available) to the error object - err['statusCode'] = statusCode; - if (response.result) { - err['result'] = response.result; - } - reject(err); - } - else { - resolve(response); - } - })); - }); - } -} -exports.RestClient = RestClient; +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const httpm = require("./HttpClient"); +const util = require("./Util"); +class RestClient { + /** + * Creates an instance of the RestClient + * @constructor + * @param {string} userAgent - userAgent for requests + * @param {string} baseUrl - (Optional) If not specified, use full urls per request. If supplied and a function passes a relative url, it will be appended to this + * @param {ifm.IRequestHandler[]} handlers - handlers are typically auth handlers (basic, bearer, ntlm supplied) + * @param {ifm.IRequestOptions} requestOptions - options for each http requests (http proxy setting, socket timeout) + */ + constructor(userAgent, baseUrl, handlers, requestOptions) { + this.client = new httpm.HttpClient(userAgent, handlers, requestOptions); + if (baseUrl) { + this._baseUrl = baseUrl; + } + } + /** + * Gets a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} requestUrl - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + options(requestUrl, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(requestUrl, this._baseUrl); + let res = yield this.client.options(url, this._headersFromOptions(options)); + return this.processResponse(res, options); + }); + } + /** + * Gets a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified url or relative path + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + get(resource, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(resource, this._baseUrl, (options || {}).queryParameters); + let res = yield this.client.get(url, this._headersFromOptions(options)); + return this.processResponse(res, options); + }); + } + /** + * Deletes a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + del(resource, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(resource, this._baseUrl, (options || {}).queryParameters); + let res = yield this.client.del(url, this._headersFromOptions(options)); + return this.processResponse(res, options); + }); + } + /** + * Creates resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + create(resource, resources, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(resource, this._baseUrl); + let headers = this._headersFromOptions(options, true); + let data = JSON.stringify(resources, null, 2); + let res = yield this.client.post(url, data, headers); + return this.processResponse(res, options); + }); + } + /** + * Updates resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + update(resource, resources, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(resource, this._baseUrl); + let headers = this._headersFromOptions(options, true); + let data = JSON.stringify(resources, null, 2); + let res = yield this.client.patch(url, data, headers); + return this.processResponse(res, options); + }); + } + /** + * Replaces resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + replace(resource, resources, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(resource, this._baseUrl); + let headers = this._headersFromOptions(options, true); + let data = JSON.stringify(resources, null, 2); + let res = yield this.client.put(url, data, headers); + return this.processResponse(res, options); + }); + } + uploadStream(verb, requestUrl, stream, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(requestUrl, this._baseUrl); + let headers = this._headersFromOptions(options, true); + let res = yield this.client.sendStream(verb, url, stream, headers); + return this.processResponse(res, options); + }); + } + _headersFromOptions(options, contentType) { + options = options || {}; + let headers = options.additionalHeaders || {}; + headers["Accept"] = options.acceptHeader || "application/json"; + if (contentType) { + let found = false; + for (let header in headers) { + if (header.toLowerCase() == "content-type") { + found = true; + } + } + if (!found) { + headers["Content-Type"] = 'application/json; charset=utf-8'; + } + } + return headers; + } + static dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + let a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + processResponse(res, options) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + const statusCode = res.message.statusCode; + const response = { + statusCode: statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode == httpm.HttpCodes.NotFound) { + resolve(response); + } + let obj; + let contents; + // get the result from the body + try { + contents = yield res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, RestClient.dateTimeDeserializer); + } + else { + obj = JSON.parse(contents); + } + if (options && options.responseProcessor) { + response.result = options.responseProcessor(obj); + } + else { + response.result = obj; + } + } + response.headers = res.message.headers; + } + catch (err) { + // Invalid resource (contents not json); leaving result obj null + } + // note that 3xx redirects are handled by the http layer. + if (statusCode > 299) { + let msg; + // if exception/error in body, attempt to get better error + if (obj && obj.message) { + msg = obj.message; + } + else if (contents && contents.length > 0) { + // it may be the case that the exception is in the body message as string + msg = contents; + } + else { + msg = "Failed request: (" + statusCode + ")"; + } + let err = new Error(msg); + // attach statusCode and body obj (if available) to the error object + err['statusCode'] = statusCode; + if (response.result) { + err['result'] = response.result; + } + reject(err); + } + else { + resolve(response); + } + })); + }); + } +} +exports.RestClient = RestClient; diff --git a/node_modules/typed-rest-client/ThirdPartyNotice.txt b/node_modules/typed-rest-client/ThirdPartyNotice.txt index 7bd6774..2610c8a 100644 --- a/node_modules/typed-rest-client/ThirdPartyNotice.txt +++ b/node_modules/typed-rest-client/ThirdPartyNotice.txt @@ -1,1318 +1,1318 @@ - -THIRD-PARTY SOFTWARE NOTICES AND INFORMATION -Do Not Translate or Localize - -This Visual Studio Team Services extension (vsts-task-lib) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Visual Studio Team Services extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. - -1. @types/glob (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -2. @types/minimatch (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -3. @types/mocha (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -4. @types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -5. @types/shelljs (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -6. balanced-match (git://github.com/juliangruber/balanced-match.git) -7. brace-expansion (git://github.com/juliangruber/brace-expansion.git) -8. browser-stdout (git+ssh://git@github.com/kumavis/browser-stdout.git) -9. commander (git+https://github.com/tj/commander.js.git) -10. concat-map (git://github.com/substack/node-concat-map.git) -11. debug (git://github.com/visionmedia/debug.git) -12. diff (git://github.com/kpdecker/jsdiff.git) -13. escape-string-regexp (git+https://github.com/sindresorhus/escape-string-regexp.git) -14. fs.realpath (git+https://github.com/isaacs/fs.realpath.git) -15. glob (git://github.com/isaacs/node-glob.git) -16. graceful-readlink (git://github.com/zhiyelee/graceful-readlink.git) -17. growl (git://github.com/tj/node-growl.git) -18. has-flag (git+https://github.com/sindresorhus/has-flag.git) -19. he (git+https://github.com/mathiasbynens/he.git) -20. inflight (git+https://github.com/npm/inflight.git) -21. inherits (git://github.com/isaacs/inherits.git) -22. interpret (git://github.com/tkellen/node-interpret.git) -23. json3 (git://github.com/bestiejs/json3.git) -24. lodash.create (git+https://github.com/lodash/lodash.git) -25. lodash.isarguments (git+https://github.com/lodash/lodash.git) -26. lodash.isarray (git+https://github.com/lodash/lodash.git) -27. lodash.keys (git+https://github.com/lodash/lodash.git) -28. lodash._baseassign (git+https://github.com/lodash/lodash.git) -29. lodash._basecopy (git+https://github.com/lodash/lodash.git) -30. lodash._basecreate (git+https://github.com/lodash/lodash.git) -31. lodash._getnative (git+https://github.com/lodash/lodash.git) -32. lodash._isiterateecall (git+https://github.com/lodash/lodash.git) -33. minimatch (git://github.com/isaacs/minimatch.git) -34. minimist (git://github.com/substack/minimist.git) -35. mkdirp (git+https://github.com/substack/node-mkdirp.git) -36. mocha (git+https://github.com/mochajs/mocha.git) -37. ms (git+https://github.com/zeit/ms.git) -38. once (git://github.com/isaacs/once.git) -39. path-is-absolute (git+https://github.com/sindresorhus/path-is-absolute.git) -40. path-parse (git+https://github.com/jbgutierrez/path-parse.git) -41. rechoir (git://github.com/tkellen/node-rechoir.git) -42. resolve (git://github.com/substack/node-resolve.git) -43. semver (git://github.com/npm/node-semver.git) -44. shelljs (git://github.com/shelljs/shelljs.git) -45. supports-color (git+https://github.com/chalk/supports-color.git) -46. tunnel (git+https://github.com/koichik/node-tunnel.git) -47. typescript (git+https://github.com/Microsoft/TypeScript.git) -48. underscore (git://github.com/jashkenas/underscore.git) -49. wrappy (git+https://github.com/npm/wrappy.git) - - -%% @types/glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE -========================================= -END OF @types/glob NOTICES, INFORMATION, AND LICENSE - -%% @types/minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE -========================================= -END OF @types/minimatch NOTICES, INFORMATION, AND LICENSE - -%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE -========================================= -END OF @types/mocha NOTICES, INFORMATION, AND LICENSE - -%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE -========================================= -END OF @types/node NOTICES, INFORMATION, AND LICENSE - -%% @types/shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE -========================================= -END OF @types/shelljs NOTICES, INFORMATION, AND LICENSE - -%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -========================================= -END OF balanced-match NOTICES, INFORMATION, AND LICENSE - -%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -No license text available. -========================================= -END OF brace-expansion NOTICES, INFORMATION, AND LICENSE - -%% browser-stdout NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -No license text available. -========================================= -END OF browser-stdout NOTICES, INFORMATION, AND LICENSE - -%% commander NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF commander NOTICES, INFORMATION, AND LICENSE - -%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF concat-map NOTICES, INFORMATION, AND LICENSE - -%% debug NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software -and associated documentation files (the 'Software'), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF debug NOTICES, INFORMATION, AND LICENSE - -%% diff NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Software License Agreement (BSD License) - -Copyright (c) 2009-2015, Kevin Decker - -All rights reserved. - -Redistribution and use of this software in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - -* Neither the name of Kevin Decker nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF diff NOTICES, INFORMATION, AND LICENSE - -%% escape-string-regexp NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF escape-string-regexp NOTICES, INFORMATION, AND LICENSE - -%% fs.realpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----- - -This library bundles a version of the `fs.realpath` and `fs.realpathSync` -methods from Node.js v0.10 under the terms of the Node.js MIT license. - -Node's license follows, also included at the header of `old.js` which contains -the licensed code: - - Copyright Joyent, Inc. and other Node contributors. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -========================================= -END OF fs.realpath NOTICES, INFORMATION, AND LICENSE - -%% glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF glob NOTICES, INFORMATION, AND LICENSE - -%% graceful-readlink NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) 2015 Zhiye Li - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -========================================= -END OF graceful-readlink NOTICES, INFORMATION, AND LICENSE - -%% growl NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -No license text available. -========================================= -END OF growl NOTICES, INFORMATION, AND LICENSE - -%% has-flag NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF has-flag NOTICES, INFORMATION, AND LICENSE - -%% he NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF he NOTICES, INFORMATION, AND LICENSE - -%% inflight NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF inflight NOTICES, INFORMATION, AND LICENSE - -%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF inherits NOTICES, INFORMATION, AND LICENSE - -%% interpret NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2014 Tyler Kellen - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF interpret NOTICES, INFORMATION, AND LICENSE - -%% json3 NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2012-2014 Kit Cambridge. -http://kitcambridge.be/ - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -========================================= -END OF json3 NOTICES, INFORMATION, AND LICENSE - -%% lodash.create NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF lodash.create NOTICES, INFORMATION, AND LICENSE - -%% lodash.isarguments NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. -========================================= -END OF lodash.isarguments NOTICES, INFORMATION, AND LICENSE - -%% lodash.isarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF lodash.isarray NOTICES, INFORMATION, AND LICENSE - -%% lodash.keys NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF lodash.keys NOTICES, INFORMATION, AND LICENSE - -%% lodash._baseassign NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF lodash._baseassign NOTICES, INFORMATION, AND LICENSE - -%% lodash._basecopy NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF lodash._basecopy NOTICES, INFORMATION, AND LICENSE - -%% lodash._basecreate NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF lodash._basecreate NOTICES, INFORMATION, AND LICENSE - -%% lodash._getnative NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF lodash._getnative NOTICES, INFORMATION, AND LICENSE - -%% lodash._isiterateecall NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF lodash._isiterateecall NOTICES, INFORMATION, AND LICENSE - -%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF minimatch NOTICES, INFORMATION, AND LICENSE - -%% minimist NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF minimist NOTICES, INFORMATION, AND LICENSE - -%% mkdirp NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF mkdirp NOTICES, INFORMATION, AND LICENSE - -%% mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(The MIT License) - -Copyright (c) 2011-2017 JS Foundation and contributors, https://js.foundation - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF mocha NOTICES, INFORMATION, AND LICENSE - -%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) 2016 Zeit, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -========================================= -END OF ms NOTICES, INFORMATION, AND LICENSE - -%% once NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF once NOTICES, INFORMATION, AND LICENSE - -%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF path-is-absolute NOTICES, INFORMATION, AND LICENSE - -%% path-parse NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -No license text available. -========================================= -END OF path-parse NOTICES, INFORMATION, AND LICENSE - -%% rechoir NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2015 Tyler Kellen - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF rechoir NOTICES, INFORMATION, AND LICENSE - -%% resolve NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF resolve NOTICES, INFORMATION, AND LICENSE - -%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) Isaac Z. Schlueter ("Author") -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF semver NOTICES, INFORMATION, AND LICENSE - -%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2012, Artur Adib -All rights reserved. - -You may use this project under the terms of the New BSD license as follows: - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Artur Adib nor the - names of the contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF shelljs NOTICES, INFORMATION, AND LICENSE - -%% supports-color NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF supports-color NOTICES, INFORMATION, AND LICENSE - -%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) 2012 Koichi Kobayashi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF tunnel NOTICES, INFORMATION, AND LICENSE - -%% typescript NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS -========================================= -END OF typescript NOTICES, INFORMATION, AND LICENSE - -%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative -Reporters & Editors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF underscore NOTICES, INFORMATION, AND LICENSE - -%% wrappy NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF wrappy NOTICES, INFORMATION, AND LICENSE - + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +This Visual Studio Team Services extension (vsts-task-lib) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Visual Studio Team Services extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. + +1. @types/glob (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +2. @types/minimatch (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +3. @types/mocha (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +4. @types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +5. @types/shelljs (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +6. balanced-match (git://github.com/juliangruber/balanced-match.git) +7. brace-expansion (git://github.com/juliangruber/brace-expansion.git) +8. browser-stdout (git+ssh://git@github.com/kumavis/browser-stdout.git) +9. commander (git+https://github.com/tj/commander.js.git) +10. concat-map (git://github.com/substack/node-concat-map.git) +11. debug (git://github.com/visionmedia/debug.git) +12. diff (git://github.com/kpdecker/jsdiff.git) +13. escape-string-regexp (git+https://github.com/sindresorhus/escape-string-regexp.git) +14. fs.realpath (git+https://github.com/isaacs/fs.realpath.git) +15. glob (git://github.com/isaacs/node-glob.git) +16. graceful-readlink (git://github.com/zhiyelee/graceful-readlink.git) +17. growl (git://github.com/tj/node-growl.git) +18. has-flag (git+https://github.com/sindresorhus/has-flag.git) +19. he (git+https://github.com/mathiasbynens/he.git) +20. inflight (git+https://github.com/npm/inflight.git) +21. inherits (git://github.com/isaacs/inherits.git) +22. interpret (git://github.com/tkellen/node-interpret.git) +23. json3 (git://github.com/bestiejs/json3.git) +24. lodash.create (git+https://github.com/lodash/lodash.git) +25. lodash.isarguments (git+https://github.com/lodash/lodash.git) +26. lodash.isarray (git+https://github.com/lodash/lodash.git) +27. lodash.keys (git+https://github.com/lodash/lodash.git) +28. lodash._baseassign (git+https://github.com/lodash/lodash.git) +29. lodash._basecopy (git+https://github.com/lodash/lodash.git) +30. lodash._basecreate (git+https://github.com/lodash/lodash.git) +31. lodash._getnative (git+https://github.com/lodash/lodash.git) +32. lodash._isiterateecall (git+https://github.com/lodash/lodash.git) +33. minimatch (git://github.com/isaacs/minimatch.git) +34. minimist (git://github.com/substack/minimist.git) +35. mkdirp (git+https://github.com/substack/node-mkdirp.git) +36. mocha (git+https://github.com/mochajs/mocha.git) +37. ms (git+https://github.com/zeit/ms.git) +38. once (git://github.com/isaacs/once.git) +39. path-is-absolute (git+https://github.com/sindresorhus/path-is-absolute.git) +40. path-parse (git+https://github.com/jbgutierrez/path-parse.git) +41. rechoir (git://github.com/tkellen/node-rechoir.git) +42. resolve (git://github.com/substack/node-resolve.git) +43. semver (git://github.com/npm/node-semver.git) +44. shelljs (git://github.com/shelljs/shelljs.git) +45. supports-color (git+https://github.com/chalk/supports-color.git) +46. tunnel (git+https://github.com/koichik/node-tunnel.git) +47. typescript (git+https://github.com/Microsoft/TypeScript.git) +48. underscore (git://github.com/jashkenas/underscore.git) +49. wrappy (git+https://github.com/npm/wrappy.git) + + +%% @types/glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/glob NOTICES, INFORMATION, AND LICENSE + +%% @types/minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/minimatch NOTICES, INFORMATION, AND LICENSE + +%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/mocha NOTICES, INFORMATION, AND LICENSE + +%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/node NOTICES, INFORMATION, AND LICENSE + +%% @types/shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/shelljs NOTICES, INFORMATION, AND LICENSE + +%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF balanced-match NOTICES, INFORMATION, AND LICENSE + +%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +No license text available. +========================================= +END OF brace-expansion NOTICES, INFORMATION, AND LICENSE + +%% browser-stdout NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +No license text available. +========================================= +END OF browser-stdout NOTICES, INFORMATION, AND LICENSE + +%% commander NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF commander NOTICES, INFORMATION, AND LICENSE + +%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF concat-map NOTICES, INFORMATION, AND LICENSE + +%% debug NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF debug NOTICES, INFORMATION, AND LICENSE + +%% diff NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Software License Agreement (BSD License) + +Copyright (c) 2009-2015, Kevin Decker + +All rights reserved. + +Redistribution and use of this software in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of Kevin Decker nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF diff NOTICES, INFORMATION, AND LICENSE + +%% escape-string-regexp NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF escape-string-regexp NOTICES, INFORMATION, AND LICENSE + +%% fs.realpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---- + +This library bundles a version of the `fs.realpath` and `fs.realpathSync` +methods from Node.js v0.10 under the terms of the Node.js MIT license. + +Node's license follows, also included at the header of `old.js` which contains +the licensed code: + + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +========================================= +END OF fs.realpath NOTICES, INFORMATION, AND LICENSE + +%% glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF glob NOTICES, INFORMATION, AND LICENSE + +%% graceful-readlink NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2015 Zhiye Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF graceful-readlink NOTICES, INFORMATION, AND LICENSE + +%% growl NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +No license text available. +========================================= +END OF growl NOTICES, INFORMATION, AND LICENSE + +%% has-flag NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF has-flag NOTICES, INFORMATION, AND LICENSE + +%% he NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF he NOTICES, INFORMATION, AND LICENSE + +%% inflight NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF inflight NOTICES, INFORMATION, AND LICENSE + +%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF inherits NOTICES, INFORMATION, AND LICENSE + +%% interpret NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Tyler Kellen + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF interpret NOTICES, INFORMATION, AND LICENSE + +%% json3 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012-2014 Kit Cambridge. +http://kitcambridge.be/ + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF json3 NOTICES, INFORMATION, AND LICENSE + +%% lodash.create NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash.create NOTICES, INFORMATION, AND LICENSE + +%% lodash.isarguments NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright jQuery Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. +========================================= +END OF lodash.isarguments NOTICES, INFORMATION, AND LICENSE + +%% lodash.isarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash.isarray NOTICES, INFORMATION, AND LICENSE + +%% lodash.keys NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash.keys NOTICES, INFORMATION, AND LICENSE + +%% lodash._baseassign NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash._baseassign NOTICES, INFORMATION, AND LICENSE + +%% lodash._basecopy NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash._basecopy NOTICES, INFORMATION, AND LICENSE + +%% lodash._basecreate NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash._basecreate NOTICES, INFORMATION, AND LICENSE + +%% lodash._getnative NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash._getnative NOTICES, INFORMATION, AND LICENSE + +%% lodash._isiterateecall NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash._isiterateecall NOTICES, INFORMATION, AND LICENSE + +%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF minimatch NOTICES, INFORMATION, AND LICENSE + +%% minimist NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF minimist NOTICES, INFORMATION, AND LICENSE + +%% mkdirp NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF mkdirp NOTICES, INFORMATION, AND LICENSE + +%% mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (c) 2011-2017 JS Foundation and contributors, https://js.foundation + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF mocha NOTICES, INFORMATION, AND LICENSE + +%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2016 Zeit, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF ms NOTICES, INFORMATION, AND LICENSE + +%% once NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF once NOTICES, INFORMATION, AND LICENSE + +%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF path-is-absolute NOTICES, INFORMATION, AND LICENSE + +%% path-parse NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +No license text available. +========================================= +END OF path-parse NOTICES, INFORMATION, AND LICENSE + +%% rechoir NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2015 Tyler Kellen + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF rechoir NOTICES, INFORMATION, AND LICENSE + +%% resolve NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF resolve NOTICES, INFORMATION, AND LICENSE + +%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) Isaac Z. Schlueter ("Author") +All rights reserved. + +The BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF semver NOTICES, INFORMATION, AND LICENSE + +%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012, Artur Adib +All rights reserved. + +You may use this project under the terms of the New BSD license as follows: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Artur Adib nor the + names of the contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF shelljs NOTICES, INFORMATION, AND LICENSE + +%% supports-color NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF supports-color NOTICES, INFORMATION, AND LICENSE + +%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2012 Koichi Kobayashi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF tunnel NOTICES, INFORMATION, AND LICENSE + +%% typescript NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS +========================================= +END OF typescript NOTICES, INFORMATION, AND LICENSE + +%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative +Reporters & Editors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF underscore NOTICES, INFORMATION, AND LICENSE + +%% wrappy NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF wrappy NOTICES, INFORMATION, AND LICENSE + diff --git a/node_modules/typed-rest-client/Util.d.ts b/node_modules/typed-rest-client/Util.d.ts index 32757e8..7011a0a 100644 --- a/node_modules/typed-rest-client/Util.d.ts +++ b/node_modules/typed-rest-client/Util.d.ts @@ -1,7 +1,28 @@ -/** - * creates an url from a request url and optional base url (http://server:8080) - * @param {string} resource - a fully qualified url or relative path - * @param {string} baseUrl - an optional baseUrl (http://server:8080) - * @return {string} - resultant url - */ -export declare function getUrl(resource: string, baseUrl?: string): string; +/// +import { IRequestQueryParams, IHttpClientResponse } from './Interfaces'; +/** + * creates an url from a request url and optional base url (http://server:8080) + * @param {string} resource - a fully qualified url or relative path + * @param {string} baseUrl - an optional baseUrl (http://server:8080) + * @param {IRequestOptions} options - an optional options object, could include QueryParameters e.g. + * @return {string} - resultant url + */ +export declare function getUrl(resource: string, baseUrl?: string, queryParams?: IRequestQueryParams): string; +/** + * Decompress/Decode gzip encoded JSON + * Using Node.js built-in zlib module + * + * @param {Buffer} buffer + * @param {string} charset? - optional; defaults to 'utf-8' + * @return {Promise} + */ +export declare function decompressGzippedContent(buffer: Buffer, charset?: string): Promise; +/** + * Obtain Response's Content Charset. + * Through inspecting `content-type` response header. + * It Returns 'utf-8' if NO charset specified/matched. + * + * @param {IHttpClientResponse} response + * @return {string} - Content Encoding Charset; Default=utf-8 + */ +export declare function obtainContentCharset(response: IHttpClientResponse): string; diff --git a/node_modules/typed-rest-client/Util.js b/node_modules/typed-rest-client/Util.js index 32981d1..855bc7f 100644 --- a/node_modules/typed-rest-client/Util.js +++ b/node_modules/typed-rest-client/Util.js @@ -1,35 +1,119 @@ -"use strict"; -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -Object.defineProperty(exports, "__esModule", { value: true }); -const url = require("url"); -const path = require("path"); -/** - * creates an url from a request url and optional base url (http://server:8080) - * @param {string} resource - a fully qualified url or relative path - * @param {string} baseUrl - an optional baseUrl (http://server:8080) - * @return {string} - resultant url - */ -function getUrl(resource, baseUrl) { - const pathApi = path.posix || path; - if (!baseUrl) { - return resource; - } - else if (!resource) { - return baseUrl; - } - else { - const base = url.parse(baseUrl); - const resultantUrl = url.parse(resource); - // resource (specific per request) elements take priority - resultantUrl.protocol = resultantUrl.protocol || base.protocol; - resultantUrl.auth = resultantUrl.auth || base.auth; - resultantUrl.host = resultantUrl.host || base.host; - resultantUrl.pathname = pathApi.resolve(base.pathname, resultantUrl.pathname); - if (!resultantUrl.pathname.endsWith('/') && resource.endsWith('/')) { - resultantUrl.pathname += '/'; - } - return url.format(resultantUrl); - } -} -exports.getUrl = getUrl; +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const qs = require("qs"); +const url = require("url"); +const path = require("path"); +const zlib = require("zlib"); +/** + * creates an url from a request url and optional base url (http://server:8080) + * @param {string} resource - a fully qualified url or relative path + * @param {string} baseUrl - an optional baseUrl (http://server:8080) + * @param {IRequestOptions} options - an optional options object, could include QueryParameters e.g. + * @return {string} - resultant url + */ +function getUrl(resource, baseUrl, queryParams) { + const pathApi = path.posix || path; + let requestUrl = ''; + if (!baseUrl) { + requestUrl = resource; + } + else if (!resource) { + requestUrl = baseUrl; + } + else { + const base = url.parse(baseUrl); + const resultantUrl = url.parse(resource); + // resource (specific per request) elements take priority + resultantUrl.protocol = resultantUrl.protocol || base.protocol; + resultantUrl.auth = resultantUrl.auth || base.auth; + resultantUrl.host = resultantUrl.host || base.host; + resultantUrl.pathname = pathApi.resolve(base.pathname, resultantUrl.pathname); + if (!resultantUrl.pathname.endsWith('/') && resource.endsWith('/')) { + resultantUrl.pathname += '/'; + } + requestUrl = url.format(resultantUrl); + } + return queryParams ? + getUrlWithParsedQueryParams(requestUrl, queryParams) : + requestUrl; +} +exports.getUrl = getUrl; +/** + * + * @param {string} requestUrl + * @param {IRequestQueryParams} queryParams + * @return {string} - Request's URL with Query Parameters appended/parsed. + */ +function getUrlWithParsedQueryParams(requestUrl, queryParams) { + const url = requestUrl.replace(/\?$/g, ''); // Clean any extra end-of-string "?" character + const parsedQueryParams = qs.stringify(queryParams.params, buildParamsStringifyOptions(queryParams)); + return `${url}${parsedQueryParams}`; +} +/** + * Build options for QueryParams Stringifying. + * + * @param {IRequestQueryParams} queryParams + * @return {object} + */ +function buildParamsStringifyOptions(queryParams) { + let options = { + addQueryPrefix: true, + delimiter: (queryParams.options || {}).separator || '&', + allowDots: (queryParams.options || {}).shouldAllowDots || false, + arrayFormat: (queryParams.options || {}).arrayFormat || 'repeat', + encodeValuesOnly: (queryParams.options || {}).shouldOnlyEncodeValues || true + }; + return options; +} +/** + * Decompress/Decode gzip encoded JSON + * Using Node.js built-in zlib module + * + * @param {Buffer} buffer + * @param {string} charset? - optional; defaults to 'utf-8' + * @return {Promise} + */ +function decompressGzippedContent(buffer, charset) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + zlib.gunzip(buffer, function (error, buffer) { + if (error) { + reject(error); + } + resolve(buffer.toString(charset || 'utf-8')); + }); + })); + }); +} +exports.decompressGzippedContent = decompressGzippedContent; +/** + * Obtain Response's Content Charset. + * Through inspecting `content-type` response header. + * It Returns 'utf-8' if NO charset specified/matched. + * + * @param {IHttpClientResponse} response + * @return {string} - Content Encoding Charset; Default=utf-8 + */ +function obtainContentCharset(response) { + // Find the charset, if specified. + // Search for the `charset=CHARSET` string, not including `;,\r\n` + // Example: content-type: 'application/json;charset=utf-8' + // |__ matches would be ['charset=utf-8', 'utf-8', index: 18, input: 'application/json; charset=utf-8'] + // |_____ matches[1] would have the charset :tada: , in our example it's utf-8 + // However, if the matches Array was empty or no charset found, 'utf-8' would be returned by default. + const nodeSupportedEncodings = ['ascii', 'utf8', 'utf16le', 'ucs2', 'base64', 'binary', 'hex']; + const contentType = response.message.headers['content-type'] || ''; + const matches = contentType.match(/charset=([^;,\r\n]+)/i); + return (matches && matches[1] && nodeSupportedEncodings.indexOf(matches[1]) != -1) ? matches[1] : 'utf-8'; +} +exports.obtainContentCharset = obtainContentCharset; diff --git a/node_modules/typed-rest-client/handlers/basiccreds.d.ts b/node_modules/typed-rest-client/handlers/basiccreds.d.ts index 17ade55..6378da4 100644 --- a/node_modules/typed-rest-client/handlers/basiccreds.d.ts +++ b/node_modules/typed-rest-client/handlers/basiccreds.d.ts @@ -1,9 +1,11 @@ -import ifm = require('../Interfaces'); -export declare class BasicCredentialHandler implements ifm.IRequestHandler { - username: string; - password: string; - constructor(username: string, password: string); - prepareRequest(options: any): void; - canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; - handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; -} +import ifm = require('../Interfaces'); +export declare class BasicCredentialHandler implements ifm.IRequestHandler { + username: string; + password: string; + allowCrossOriginAuthentication: boolean; + origin: string; + constructor(username: string, password: string, allowCrossOriginAuthentication?: boolean); + prepareRequest(options: any): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; +} diff --git a/node_modules/typed-rest-client/handlers/basiccreds.js b/node_modules/typed-rest-client/handlers/basiccreds.js index 384a39c..648c189 100644 --- a/node_modules/typed-rest-client/handlers/basiccreds.js +++ b/node_modules/typed-rest-client/handlers/basiccreds.js @@ -1,24 +1,31 @@ -"use strict"; -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -Object.defineProperty(exports, "__esModule", { value: true }); -class BasicCredentialHandler { - constructor(username, password) { - this.username = username; - this.password = password; - } - // currently implements pre-authorization - // TODO: support preAuth = false where it hooks on 401 - prepareRequest(options) { - options.headers['Authorization'] = 'Basic ' + new Buffer(this.username + ':' + this.password).toString('base64'); - options.headers['X-TFS-FedAuthRedirect'] = 'Suppress'; - } - // This handler cannot handle 401 - canHandleAuthentication(response) { - return false; - } - handleAuthentication(httpClient, requestInfo, objs) { - return null; - } -} -exports.BasicCredentialHandler = BasicCredentialHandler; +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +class BasicCredentialHandler { + constructor(username, password, allowCrossOriginAuthentication) { + this.username = username; + this.password = password; + this.allowCrossOriginAuthentication = allowCrossOriginAuthentication; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + if (!this.origin) { + this.origin = options.host; + } + // If this is a redirection, don't set the Authorization header + if (this.origin === options.host || this.allowCrossOriginAuthentication) { + options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; + } + options.headers['X-TFS-FedAuthRedirect'] = 'Suppress'; + } + // This handler cannot handle 401 + canHandleAuthentication(response) { + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return null; + } +} +exports.BasicCredentialHandler = BasicCredentialHandler; diff --git a/node_modules/typed-rest-client/handlers/bearertoken.d.ts b/node_modules/typed-rest-client/handlers/bearertoken.d.ts index c08496f..29a2c59 100644 --- a/node_modules/typed-rest-client/handlers/bearertoken.d.ts +++ b/node_modules/typed-rest-client/handlers/bearertoken.d.ts @@ -1,8 +1,10 @@ -import ifm = require('../Interfaces'); -export declare class BearerCredentialHandler implements ifm.IRequestHandler { - token: string; - constructor(token: string); - prepareRequest(options: any): void; - canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; - handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; -} +import ifm = require('../Interfaces'); +export declare class BearerCredentialHandler implements ifm.IRequestHandler { + token: string; + allowCrossOriginAuthentication: boolean; + origin: string; + constructor(token: string, allowCrossOriginAuthentication?: boolean); + prepareRequest(options: any): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; +} diff --git a/node_modules/typed-rest-client/handlers/bearertoken.js b/node_modules/typed-rest-client/handlers/bearertoken.js index dad27a7..c62739d 100644 --- a/node_modules/typed-rest-client/handlers/bearertoken.js +++ b/node_modules/typed-rest-client/handlers/bearertoken.js @@ -1,23 +1,30 @@ -"use strict"; -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -Object.defineProperty(exports, "__esModule", { value: true }); -class BearerCredentialHandler { - constructor(token) { - this.token = token; - } - // currently implements pre-authorization - // TODO: support preAuth = false where it hooks on 401 - prepareRequest(options) { - options.headers['Authorization'] = 'Bearer ' + this.token; - options.headers['X-TFS-FedAuthRedirect'] = 'Suppress'; - } - // This handler cannot handle 401 - canHandleAuthentication(response) { - return false; - } - handleAuthentication(httpClient, requestInfo, objs) { - return null; - } -} -exports.BearerCredentialHandler = BearerCredentialHandler; +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +class BearerCredentialHandler { + constructor(token, allowCrossOriginAuthentication) { + this.token = token; + this.allowCrossOriginAuthentication = allowCrossOriginAuthentication; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + if (!this.origin) { + this.origin = options.host; + } + // If this is a redirection, don't set the Authorization header + if (this.origin === options.host || this.allowCrossOriginAuthentication) { + options.headers['Authorization'] = `Bearer ${this.token}`; + } + options.headers['X-TFS-FedAuthRedirect'] = 'Suppress'; + } + // This handler cannot handle 401 + canHandleAuthentication(response) { + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return null; + } +} +exports.BearerCredentialHandler = BearerCredentialHandler; diff --git a/node_modules/typed-rest-client/handlers/ntlm.d.ts b/node_modules/typed-rest-client/handlers/ntlm.d.ts index 2f509b0..fa3179d 100644 --- a/node_modules/typed-rest-client/handlers/ntlm.d.ts +++ b/node_modules/typed-rest-client/handlers/ntlm.d.ts @@ -1,13 +1,13 @@ -/// -import ifm = require('../Interfaces'); -import http = require("http"); -export declare class NtlmCredentialHandler implements ifm.IRequestHandler { - private _ntlmOptions; - constructor(username: string, password: string, workstation?: string, domain?: string); - prepareRequest(options: http.RequestOptions): void; - canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; - handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; - private handleAuthenticationPrivate(httpClient, requestInfo, objs, finalCallback); - private sendType1Message(httpClient, requestInfo, objs, finalCallback); - private sendType3Message(httpClient, requestInfo, objs, res, callback); -} +/// +import ifm = require('../Interfaces'); +import http = require("http"); +export declare class NtlmCredentialHandler implements ifm.IRequestHandler { + private _ntlmOptions; + constructor(username: string, password: string, workstation?: string, domain?: string); + prepareRequest(options: http.RequestOptions): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; + private handleAuthenticationPrivate; + private sendType1Message; + private sendType3Message; +} diff --git a/node_modules/typed-rest-client/handlers/ntlm.js b/node_modules/typed-rest-client/handlers/ntlm.js index 5fbca82..69bec4a 100644 --- a/node_modules/typed-rest-client/handlers/ntlm.js +++ b/node_modules/typed-rest-client/handlers/ntlm.js @@ -1,137 +1,137 @@ -"use strict"; -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -Object.defineProperty(exports, "__esModule", { value: true }); -const http = require("http"); -const https = require("https"); -const _ = require("underscore"); -const ntlm = require("../opensource/node-http-ntlm/ntlm"); -class NtlmCredentialHandler { - constructor(username, password, workstation, domain) { - this._ntlmOptions = {}; - this._ntlmOptions.username = username; - this._ntlmOptions.password = password; - if (domain !== undefined) { - this._ntlmOptions.domain = domain; - } - else { - this._ntlmOptions.domain = ''; - } - if (workstation !== undefined) { - this._ntlmOptions.workstation = workstation; - } - else { - this._ntlmOptions.workstation = ''; - } - } - prepareRequest(options) { - // No headers or options need to be set. We keep the credentials on the handler itself. - // If a (proxy) agent is set, remove it as we don't support proxy for NTLM at this time - if (options.agent) { - delete options.agent; - } - } - canHandleAuthentication(response) { - if (response && response.message && response.message.statusCode === 401) { - // Ensure that we're talking NTLM here - // Once we have the www-authenticate header, split it so we can ensure we can talk NTLM - const wwwAuthenticate = response.message.headers['www-authenticate']; - if (wwwAuthenticate) { - const mechanisms = wwwAuthenticate.split(', '); - const index = mechanisms.indexOf("NTLM"); - if (index >= 0) { - return true; - } - } - } - return false; - } - handleAuthentication(httpClient, requestInfo, objs) { - return new Promise((resolve, reject) => { - const callbackForResult = function (err, res) { - if (err) { - reject(err); - } - // We have to readbody on the response before continuing otherwise there is a hang. - res.readBody().then(() => { - resolve(res); - }); - }; - this.handleAuthenticationPrivate(httpClient, requestInfo, objs, callbackForResult); - }); - } - handleAuthenticationPrivate(httpClient, requestInfo, objs, finalCallback) { - // Set up the headers for NTLM authentication - requestInfo.options = _.extend(requestInfo.options, { - username: this._ntlmOptions.username, - password: this._ntlmOptions.password, - domain: this._ntlmOptions.domain, - workstation: this._ntlmOptions.workstation - }); - if (httpClient.isSsl === true) { - requestInfo.options.agent = new https.Agent({ keepAlive: true }); - } - else { - requestInfo.options.agent = new http.Agent({ keepAlive: true }); - } - let self = this; - // The following pattern of sending the type1 message following immediately (in a setImmediate) is - // critical for the NTLM exchange to happen. If we removed setImmediate (or call in a different manner) - // the NTLM exchange will always fail with a 401. - this.sendType1Message(httpClient, requestInfo, objs, function (err, res) { - if (err) { - return finalCallback(err, null, null); - } - /// We have to readbody on the response before continuing otherwise there is a hang. - res.readBody().then(() => { - // It is critical that we have setImmediate here due to how connection requests are queued. - // If setImmediate is removed then the NTLM handshake will not work. - // setImmediate allows us to queue a second request on the same connection. If this second - // request is not queued on the connection when the first request finishes then node closes - // the connection. NTLM requires both requests to be on the same connection so we need this. - setImmediate(function () { - self.sendType3Message(httpClient, requestInfo, objs, res, finalCallback); - }); - }); - }); - } - // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js - sendType1Message(httpClient, requestInfo, objs, finalCallback) { - const type1msg = ntlm.createType1Message(this._ntlmOptions); - const type1options = { - headers: { - 'Connection': 'keep-alive', - 'Authorization': type1msg - }, - timeout: requestInfo.options.timeout || 0, - agent: requestInfo.httpModule, - }; - const type1info = {}; - type1info.httpModule = requestInfo.httpModule; - type1info.parsedUrl = requestInfo.parsedUrl; - type1info.options = _.extend(type1options, _.omit(requestInfo.options, 'headers')); - return httpClient.requestRawWithCallback(type1info, objs, finalCallback); - } - // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js - sendType3Message(httpClient, requestInfo, objs, res, callback) { - if (!res.message.headers && !res.message.headers['www-authenticate']) { - throw new Error('www-authenticate not found on response of second request'); - } - const type2msg = ntlm.parseType2Message(res.message.headers['www-authenticate']); - const type3msg = ntlm.createType3Message(type2msg, this._ntlmOptions); - const type3options = { - headers: { - 'Authorization': type3msg, - 'Connection': 'Close' - }, - agent: requestInfo.httpModule, - }; - const type3info = {}; - type3info.httpModule = requestInfo.httpModule; - type3info.parsedUrl = requestInfo.parsedUrl; - type3options.headers = _.extend(type3options.headers, requestInfo.options.headers); - type3info.options = _.extend(type3options, _.omit(requestInfo.options, 'headers')); - return httpClient.requestRawWithCallback(type3info, objs, callback); - } -} -exports.NtlmCredentialHandler = NtlmCredentialHandler; +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +const http = require("http"); +const https = require("https"); +const _ = require("underscore"); +const ntlm = require("../opensource/Node-SMB/lib/ntlm"); +class NtlmCredentialHandler { + constructor(username, password, workstation, domain) { + this._ntlmOptions = {}; + this._ntlmOptions.username = username; + this._ntlmOptions.password = password; + this._ntlmOptions.domain = domain || ''; + this._ntlmOptions.workstation = workstation || ''; + } + prepareRequest(options) { + // No headers or options need to be set. We keep the credentials on the handler itself. + // If a (proxy) agent is set, remove it as we don't support proxy for NTLM at this time + if (options.agent) { + delete options.agent; + } + } + canHandleAuthentication(response) { + if (response && response.message && response.message.statusCode === 401) { + // Ensure that we're talking NTLM here + // Once we have the www-authenticate header, split it so we can ensure we can talk NTLM + const wwwAuthenticate = response.message.headers['www-authenticate']; + return wwwAuthenticate && (wwwAuthenticate.split(', ').indexOf("NTLM") >= 0); + } + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return new Promise((resolve, reject) => { + const callbackForResult = function (err, res) { + if (err) { + reject(err); + } + // We have to readbody on the response before continuing otherwise there is a hang. + res.readBody().then(() => { + resolve(res); + }); + }; + this.handleAuthenticationPrivate(httpClient, requestInfo, objs, callbackForResult); + }); + } + handleAuthenticationPrivate(httpClient, requestInfo, objs, finalCallback) { + // Set up the headers for NTLM authentication + requestInfo.options = _.extend(requestInfo.options, { + username: this._ntlmOptions.username, + password: this._ntlmOptions.password, + domain: this._ntlmOptions.domain, + workstation: this._ntlmOptions.workstation + }); + requestInfo.options.agent = httpClient.isSsl ? + new https.Agent({ keepAlive: true }) : + new http.Agent({ keepAlive: true }); + let self = this; + // The following pattern of sending the type1 message following immediately (in a setImmediate) is + // critical for the NTLM exchange to happen. If we removed setImmediate (or call in a different manner) + // the NTLM exchange will always fail with a 401. + this.sendType1Message(httpClient, requestInfo, objs, function (err, res) { + if (err) { + return finalCallback(err, null, null); + } + /// We have to readbody on the response before continuing otherwise there is a hang. + res.readBody().then(() => { + // It is critical that we have setImmediate here due to how connection requests are queued. + // If setImmediate is removed then the NTLM handshake will not work. + // setImmediate allows us to queue a second request on the same connection. If this second + // request is not queued on the connection when the first request finishes then node closes + // the connection. NTLM requires both requests to be on the same connection so we need this. + setImmediate(function () { + self.sendType3Message(httpClient, requestInfo, objs, res, finalCallback); + }); + }); + }); + } + // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js + sendType1Message(httpClient, requestInfo, objs, finalCallback) { + const type1HexBuffer = ntlm.encodeType1(this._ntlmOptions.workstation, this._ntlmOptions.domain); + const type1msg = `NTLM ${type1HexBuffer.toString('base64')}`; + const type1options = { + headers: { + 'Connection': 'keep-alive', + 'Authorization': type1msg + }, + timeout: requestInfo.options.timeout || 0, + agent: requestInfo.httpModule, + }; + const type1info = {}; + type1info.httpModule = requestInfo.httpModule; + type1info.parsedUrl = requestInfo.parsedUrl; + type1info.options = _.extend(type1options, _.omit(requestInfo.options, 'headers')); + return httpClient.requestRawWithCallback(type1info, objs, finalCallback); + } + // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js + sendType3Message(httpClient, requestInfo, objs, res, callback) { + if (!res.message.headers && !res.message.headers['www-authenticate']) { + throw new Error('www-authenticate not found on response of second request'); + } + /** + * Server will respond with challenge/nonce + * assigned to response's "WWW-AUTHENTICATE" header + * and should adhere to RegExp /^NTLM\s+(.+?)(,|\s+|$)/ + */ + const serverNonceRegex = /^NTLM\s+(.+?)(,|\s+|$)/; + const serverNonce = Buffer.from((res.message.headers['www-authenticate'].match(serverNonceRegex) || [])[1], 'base64'); + let type2msg; + /** + * Wrap decoding the Server's challenge/nonce in + * try-catch block to throw more comprehensive + * Error with clear message to consumer + */ + try { + type2msg = ntlm.decodeType2(serverNonce); + } + catch (error) { + throw new Error(`Decoding Server's Challenge to Obtain Type2Message failed with error: ${error.message}`); + } + const type3msg = ntlm.encodeType3(this._ntlmOptions.username, this._ntlmOptions.workstation, this._ntlmOptions.domain, type2msg, this._ntlmOptions.password).toString('base64'); + const type3options = { + headers: { + 'Authorization': `NTLM ${type3msg}`, + 'Connection': 'Close' + }, + agent: requestInfo.httpModule, + }; + const type3info = {}; + type3info.httpModule = requestInfo.httpModule; + type3info.parsedUrl = requestInfo.parsedUrl; + type3options.headers = _.extend(type3options.headers, requestInfo.options.headers); + type3info.options = _.extend(type3options, _.omit(requestInfo.options, 'headers')); + return httpClient.requestRawWithCallback(type3info, objs, callback); + } +} +exports.NtlmCredentialHandler = NtlmCredentialHandler; diff --git a/node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts b/node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts index 4bb77fd..dcb158e 100644 --- a/node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts +++ b/node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts @@ -1,8 +1,10 @@ -import ifm = require('../Interfaces'); -export declare class PersonalAccessTokenCredentialHandler implements ifm.IRequestHandler { - token: string; - constructor(token: string); - prepareRequest(options: any): void; - canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; - handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; -} +import ifm = require('../Interfaces'); +export declare class PersonalAccessTokenCredentialHandler implements ifm.IRequestHandler { + token: string; + allowCrossOriginAuthentication: boolean; + origin: string; + constructor(token: string, allowCrossOriginAuthentication?: boolean); + prepareRequest(options: any): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise; +} diff --git a/node_modules/typed-rest-client/handlers/personalaccesstoken.js b/node_modules/typed-rest-client/handlers/personalaccesstoken.js index 4bb88f8..6609c09 100644 --- a/node_modules/typed-rest-client/handlers/personalaccesstoken.js +++ b/node_modules/typed-rest-client/handlers/personalaccesstoken.js @@ -1,23 +1,30 @@ -"use strict"; -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -Object.defineProperty(exports, "__esModule", { value: true }); -class PersonalAccessTokenCredentialHandler { - constructor(token) { - this.token = token; - } - // currently implements pre-authorization - // TODO: support preAuth = false where it hooks on 401 - prepareRequest(options) { - options.headers['Authorization'] = 'Basic ' + new Buffer('PAT:' + this.token).toString('base64'); - options.headers['X-TFS-FedAuthRedirect'] = 'Suppress'; - } - // This handler cannot handle 401 - canHandleAuthentication(response) { - return false; - } - handleAuthentication(httpClient, requestInfo, objs) { - return null; - } -} -exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +class PersonalAccessTokenCredentialHandler { + constructor(token, allowCrossOriginAuthentication) { + this.token = token; + this.allowCrossOriginAuthentication = allowCrossOriginAuthentication; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + if (!this.origin) { + this.origin = options.host; + } + // If this is a redirection, don't set the Authorization header + if (this.origin === options.host || this.allowCrossOriginAuthentication) { + options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; + } + options.headers['X-TFS-FedAuthRedirect'] = 'Suppress'; + } + // This handler cannot handle 401 + canHandleAuthentication(response) { + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return null; + } +} +exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; diff --git a/node_modules/typed-rest-client/node_modules/qs/.editorconfig b/node_modules/typed-rest-client/node_modules/qs/.editorconfig new file mode 100644 index 0000000..b442a9f --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/.editorconfig @@ -0,0 +1,33 @@ +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 160 + +[test/*] +max_line_length = off + +[LICENSE.md] +indent_size = off + +[*.md] +max_line_length = off + +[*.json] +max_line_length = off + +[Makefile] +max_line_length = off + +[CHANGELOG.md] +indent_style = space +indent_size = 2 + +[LICENSE] +indent_size = 2 +max_line_length = off diff --git a/node_modules/typed-rest-client/node_modules/qs/.eslintignore b/node_modules/typed-rest-client/node_modules/qs/.eslintignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/.eslintignore @@ -0,0 +1 @@ +dist diff --git a/node_modules/typed-rest-client/node_modules/qs/.eslintrc b/node_modules/typed-rest-client/node_modules/qs/.eslintrc new file mode 100644 index 0000000..e3bde89 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/.eslintrc @@ -0,0 +1,21 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "complexity": 0, + "consistent-return": 1, + "func-name-matching": 0, + "id-length": [2, { "min": 1, "max": 25, "properties": "never" }], + "indent": [2, 4], + "max-lines-per-function": [2, { "max": 150 }], + "max-params": [2, 14], + "max-statements": [2, 52], + "multiline-comment-style": 0, + "no-continue": 1, + "no-magic-numbers": 0, + "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], + "operator-linebreak": [2, "before"], + } +} diff --git a/node_modules/typed-rest-client/node_modules/qs/.github/FUNDING.yml b/node_modules/typed-rest-client/node_modules/qs/.github/FUNDING.yml new file mode 100644 index 0000000..0355f4f --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/qs +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/typed-rest-client/node_modules/qs/.github/workflows/rebase.yml b/node_modules/typed-rest-client/node_modules/qs/.github/workflows/rebase.yml new file mode 100644 index 0000000..436cb79 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/.github/workflows/rebase.yml @@ -0,0 +1,15 @@ +name: Automatic Rebase + +on: [pull_request] + +jobs: + _: + name: "Automatic Rebase" + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - uses: ljharb/rebase@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/node_modules/typed-rest-client/node_modules/qs/CHANGELOG.md b/node_modules/typed-rest-client/node_modules/qs/CHANGELOG.md new file mode 100644 index 0000000..d18060b --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/CHANGELOG.md @@ -0,0 +1,345 @@ +## **6.9.4** +- [Fix] `stringify`: when `arrayFormat` is `comma`, respect `serializeDate` (#364) +- [Refactor] `stringify`: reduce branching (part of #350) +- [Refactor] move `maybeMap` to `utils` +- [Dev Deps] update `browserify`, `tape` + +## **6.9.3** +- [Fix] proper comma parsing of URL-encoded commas (#361) +- [Fix] parses comma delimited array while having percent-encoded comma treated as normal text (#336) + +## **6.9.2** +- [Fix] `parse`: Fix parsing array from object with `comma` true (#359) +- [Fix] `parse`: throw a TypeError instead of an Error for bad charset (#349) +- [meta] ignore eclint transitive audit warning +- [meta] fix indentation in package.json +- [meta] add tidelift marketing copy +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `object-inspect`, `has-symbols`, `tape`, `mkdirp`, `iconv-lite` +- [actions] add automatic rebasing / merge commit blocking + +## **6.9.1** +- [Fix] `parse`: with comma true, handle field that holds an array of arrays (#335) +- [Fix] `parse`: with comma true, do not split non-string values (#334) +- [meta] add `funding` field +- [Dev Deps] update `eslint`, `@ljharb/eslint-config` +- [Tests] use shared travis-ci config + +## **6.9.0** +- [New] `parse`/`stringify`: Pass extra key/value argument to `decoder` (#333) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `evalmd` +- [Tests] `parse`: add passing `arrayFormat` tests +- [Tests] add `posttest` using `npx aud` to run `npm audit` without a lockfile +- [Tests] up to `node` `v12.10`, `v11.15`, `v10.16`, `v8.16` +- [Tests] `Buffer.from` in node v5.0-v5.9 and v4.0-v4.4 requires a TypedArray + +## **6.8.2** +- [Fix] proper comma parsing of URL-encoded commas (#361) +- [Fix] parses comma delimited array while having percent-encoded comma treated as normal text (#336) + +## **6.8.1** +- [Fix] `parse`: Fix parsing array from object with `comma` true (#359) +- [Fix] `parse`: throw a TypeError instead of an Error for bad charset (#349) +- [Fix] `parse`: with comma true, handle field that holds an array of arrays (#335) +- [fix] `parse`: with comma true, do not split non-string values (#334) +- [meta] add tidelift marketing copy +- [meta] add `funding` field +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `safe-publish-latest`, `evalmd`, `has-symbols`, `iconv-lite`, `mkdirp`, `object-inspect` +- [Tests] `parse`: add passing `arrayFormat` tests +- [Tests] use shared travis-ci configs +- [Tests] `Buffer.from` in node v5.0-v5.9 and v4.0-v4.4 requires a TypedArray +- [actions] add automatic rebasing / merge commit blocking + +## **6.8.0** +- [New] add `depth=false` to preserve the original key; [Fix] `depth=0` should preserve the original key (#326) +- [New] [Fix] stringify symbols and bigints +- [Fix] ensure node 0.12 can stringify Symbols +- [Fix] fix for an impossible situation: when the formatter is called with a non-string value +- [Refactor] `formats`: tiny bit of cleanup. +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `browserify`, `safe-publish-latest`, `iconv-lite`, `tape` +- [Tests] add tests for `depth=0` and `depth=false` behavior, both current and intuitive/intended (#326) +- [Tests] use `eclint` instead of `editorconfig-tools` +- [docs] readme: add security note +- [meta] add github sponsorship +- [meta] add FUNDING.yml +- [meta] Clean up license text so it’s properly detected as BSD-3-Clause + +## **6.7.2** +- [Fix] proper comma parsing of URL-encoded commas (#361) +- [Fix] parses comma delimited array while having percent-encoded comma treated as normal text (#336) + +## **6.7.1** +- [Fix] `parse`: Fix parsing array from object with `comma` true (#359) +- [Fix] `parse`: with comma true, handle field that holds an array of arrays (#335) +- [fix] `parse`: with comma true, do not split non-string values (#334) +- [Fix] `parse`: throw a TypeError instead of an Error for bad charset (#349) +- [Fix] fix for an impossible situation: when the formatter is called with a non-string value +- [Refactor] `formats`: tiny bit of cleanup. +- readme: add security note +- [meta] add tidelift marketing copy +- [meta] add `funding` field +- [meta] add FUNDING.yml +- [meta] Clean up license text so it’s properly detected as BSD-3-Clause +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `safe-publish-latest`, `evalmd`, `iconv-lite`, `mkdirp`, `object-inspect`, `browserify` +- [Tests] `parse`: add passing `arrayFormat` tests +- [Tests] use shared travis-ci configs +- [Tests] `Buffer.from` in node v5.0-v5.9 and v4.0-v4.4 requires a TypedArray +- [Tests] add tests for `depth=0` and `depth=false` behavior, both current and intuitive/intended +- [Tests] use `eclint` instead of `editorconfig-tools` +- [actions] add automatic rebasing / merge commit blocking + +## **6.7.0** +- [New] `stringify`/`parse`: add `comma` as an `arrayFormat` option (#276, #219) +- [Fix] correctly parse nested arrays (#212) +- [Fix] `utils.merge`: avoid a crash with a null target and a truthy non-array source, also with an array source +- [Robustness] `stringify`: cache `Object.prototype.hasOwnProperty` +- [Refactor] `utils`: `isBuffer`: small tweak; add tests +- [Refactor] use cached `Array.isArray` +- [Refactor] `parse`/`stringify`: make a function to normalize the options +- [Refactor] `utils`: reduce observable [[Get]]s +- [Refactor] `stringify`/`utils`: cache `Array.isArray` +- [Tests] always use `String(x)` over `x.toString()` +- [Tests] fix Buffer tests to work in node < 4.5 and node < 5.10 +- [Tests] temporarily allow coverage to fail + +## **6.6.0** +- [New] Add support for iso-8859-1, utf8 "sentinel" and numeric entities (#268) +- [New] move two-value combine to a `utils` function (#189) +- [Fix] `stringify`: fix a crash with `strictNullHandling` and a custom `filter`/`serializeDate` (#279) +- [Fix] when `parseArrays` is false, properly handle keys ending in `[]` (#260) +- [Fix] `stringify`: do not crash in an obscure combo of `interpretNumericEntities`, a bad custom `decoder`, & `iso-8859-1` +- [Fix] `utils`: `merge`: fix crash when `source` is a truthy primitive & no options are provided +- [refactor] `stringify`: Avoid arr = arr.concat(...), push to the existing instance (#269) +- [Refactor] `parse`: only need to reassign the var once +- [Refactor] `parse`/`stringify`: clean up `charset` options checking; fix defaults +- [Refactor] add missing defaults +- [Refactor] `parse`: one less `concat` call +- [Refactor] `utils`: `compactQueue`: make it explicitly side-effecting +- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`, `iconv-lite`, `safe-publish-latest`, `tape` +- [Tests] up to `node` `v10.10`, `v9.11`, `v8.12`, `v6.14`, `v4.9`; pin included builds to LTS + +## **6.5.2** +- [Fix] use `safer-buffer` instead of `Buffer` constructor +- [Refactor] utils: `module.exports` one thing, instead of mutating `exports` (#230) +- [Dev Deps] update `browserify`, `eslint`, `iconv-lite`, `safer-buffer`, `tape`, `browserify` + +## **6.5.1** +- [Fix] Fix parsing & compacting very deep objects (#224) +- [Refactor] name utils functions +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` +- [Tests] up to `node` `v8.4`; use `nvm install-latest-npm` so newer npm doesn’t break older node +- [Tests] Use precise dist for Node.js 0.6 runtime (#225) +- [Tests] make 0.6 required, now that it’s passing +- [Tests] on `node` `v8.2`; fix npm on node 0.6 + +## **6.5.0** +- [New] add `utils.assign` +- [New] pass default encoder/decoder to custom encoder/decoder functions (#206) +- [New] `parse`/`stringify`: add `ignoreQueryPrefix`/`addQueryPrefix` options, respectively (#213) +- [Fix] Handle stringifying empty objects with addQueryPrefix (#217) +- [Fix] do not mutate `options` argument (#207) +- [Refactor] `parse`: cache index to reuse in else statement (#182) +- [Docs] add various badges to readme (#208) +- [Dev Deps] update `eslint`, `browserify`, `iconv-lite`, `tape` +- [Tests] up to `node` `v8.1`, `v7.10`, `v6.11`; npm v4.6 breaks on node < v1; npm v5+ breaks on node < v4 +- [Tests] add `editorconfig-tools` + +## **6.4.0** +- [New] `qs.stringify`: add `encodeValuesOnly` option +- [Fix] follow `allowPrototypes` option during merge (#201, #201) +- [Fix] support keys starting with brackets (#202, #200) +- [Fix] chmod a-x +- [Dev Deps] update `eslint` +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds +- [eslint] reduce warnings + +## **6.3.2** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Dev Deps] update `eslint` +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.3.1** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties (thanks, @snyk!) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `browserify`, `iconv-lite`, `qs-iconv`, `tape` +- [Tests] on all node minors; improve test matrix +- [Docs] document stringify option `allowDots` (#195) +- [Docs] add empty object and array values example (#195) +- [Docs] Fix minor inconsistency/typo (#192) +- [Docs] document stringify option `sort` (#191) +- [Refactor] `stringify`: throw faster with an invalid encoder +- [Refactor] remove unnecessary escapes (#184) +- Remove contributing.md, since `qs` is no longer part of `hapi` (#183) + +## **6.3.0** +- [New] Add support for RFC 1738 (#174, #173) +- [New] `stringify`: Add `serializeDate` option to customize Date serialization (#159) +- [Fix] ensure `utils.merge` handles merging two arrays +- [Refactor] only constructors should be capitalized +- [Refactor] capitalized var names are for constructors only +- [Refactor] avoid using a sparse array +- [Robustness] `formats`: cache `String#replace` +- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`; add `safe-publish-latest` +- [Tests] up to `node` `v6.8`, `v4.6`; improve test matrix +- [Tests] flesh out arrayLimit/arrayFormat tests (#107) +- [Tests] skip Object.create tests when null objects are not available +- [Tests] Turn on eslint for test files (#175) + +## **6.2.3** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.2.2** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties + +## **6.2.1** +- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values +- [Refactor] Be explicit and use `Object.prototype.hasOwnProperty.call` +- [Tests] remove `parallelshell` since it does not reliably report failures +- [Tests] up to `node` `v6.3`, `v5.12` +- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `qs-iconv` + +## [**6.2.0**](https://github.com/ljharb/qs/issues?milestone=36&state=closed) +- [New] pass Buffers to the encoder/decoder directly (#161) +- [New] add "encoder" and "decoder" options, for custom param encoding/decoding (#160) +- [Fix] fix compacting of nested sparse arrays (#150) + +## **6.1.2 +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.1.1** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties + +## [**6.1.0**](https://github.com/ljharb/qs/issues?milestone=35&state=closed) +- [New] allowDots option for `stringify` (#151) +- [Fix] "sort" option should work at a depth of 3 or more (#151) +- [Fix] Restore `dist` directory; will be removed in v7 (#148) + +## **6.0.4** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.0.3** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties +- [Fix] Restore `dist` directory; will be removed in v7 (#148) + +## [**6.0.2**](https://github.com/ljharb/qs/issues?milestone=33&state=closed) +- Revert ES6 requirement and restore support for node down to v0.8. + +## [**6.0.1**](https://github.com/ljharb/qs/issues?milestone=32&state=closed) +- [**#127**](https://github.com/ljharb/qs/pull/127) Fix engines definition in package.json + +## [**6.0.0**](https://github.com/ljharb/qs/issues?milestone=31&state=closed) +- [**#124**](https://github.com/ljharb/qs/issues/124) Use ES6 and drop support for node < v4 + +## **5.2.1** +- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values + +## [**5.2.0**](https://github.com/ljharb/qs/issues?milestone=30&state=closed) +- [**#64**](https://github.com/ljharb/qs/issues/64) Add option to sort object keys in the query string + +## [**5.1.0**](https://github.com/ljharb/qs/issues?milestone=29&state=closed) +- [**#117**](https://github.com/ljharb/qs/issues/117) make URI encoding stringified results optional +- [**#106**](https://github.com/ljharb/qs/issues/106) Add flag `skipNulls` to optionally skip null values in stringify + +## [**5.0.0**](https://github.com/ljharb/qs/issues?milestone=28&state=closed) +- [**#114**](https://github.com/ljharb/qs/issues/114) default allowDots to false +- [**#100**](https://github.com/ljharb/qs/issues/100) include dist to npm + +## [**4.0.0**](https://github.com/ljharb/qs/issues?milestone=26&state=closed) +- [**#98**](https://github.com/ljharb/qs/issues/98) make returning plain objects and allowing prototype overwriting properties optional + +## [**3.1.0**](https://github.com/ljharb/qs/issues?milestone=24&state=closed) +- [**#89**](https://github.com/ljharb/qs/issues/89) Add option to disable "Transform dot notation to bracket notation" + +## [**3.0.0**](https://github.com/ljharb/qs/issues?milestone=23&state=closed) +- [**#80**](https://github.com/ljharb/qs/issues/80) qs.parse silently drops properties +- [**#77**](https://github.com/ljharb/qs/issues/77) Perf boost +- [**#60**](https://github.com/ljharb/qs/issues/60) Add explicit option to disable array parsing +- [**#74**](https://github.com/ljharb/qs/issues/74) Bad parse when turning array into object +- [**#81**](https://github.com/ljharb/qs/issues/81) Add a `filter` option +- [**#68**](https://github.com/ljharb/qs/issues/68) Fixed issue with recursion and passing strings into objects. +- [**#66**](https://github.com/ljharb/qs/issues/66) Add mixed array and object dot notation support Closes: #47 +- [**#76**](https://github.com/ljharb/qs/issues/76) RFC 3986 +- [**#85**](https://github.com/ljharb/qs/issues/85) No equal sign +- [**#84**](https://github.com/ljharb/qs/issues/84) update license attribute + +## [**2.4.1**](https://github.com/ljharb/qs/issues?milestone=20&state=closed) +- [**#73**](https://github.com/ljharb/qs/issues/73) Property 'hasOwnProperty' of object # is not a function + +## [**2.4.0**](https://github.com/ljharb/qs/issues?milestone=19&state=closed) +- [**#70**](https://github.com/ljharb/qs/issues/70) Add arrayFormat option + +## [**2.3.3**](https://github.com/ljharb/qs/issues?milestone=18&state=closed) +- [**#59**](https://github.com/ljharb/qs/issues/59) make sure array indexes are >= 0, closes #57 +- [**#58**](https://github.com/ljharb/qs/issues/58) make qs usable for browser loader + +## [**2.3.2**](https://github.com/ljharb/qs/issues?milestone=17&state=closed) +- [**#55**](https://github.com/ljharb/qs/issues/55) allow merging a string into an object + +## [**2.3.1**](https://github.com/ljharb/qs/issues?milestone=16&state=closed) +- [**#52**](https://github.com/ljharb/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". + +## [**2.3.0**](https://github.com/ljharb/qs/issues?milestone=15&state=closed) +- [**#50**](https://github.com/ljharb/qs/issues/50) add option to omit array indices, closes #46 + +## [**2.2.5**](https://github.com/ljharb/qs/issues?milestone=14&state=closed) +- [**#39**](https://github.com/ljharb/qs/issues/39) Is there an alternative to Buffer.isBuffer? +- [**#49**](https://github.com/ljharb/qs/issues/49) refactor utils.merge, fixes #45 +- [**#41**](https://github.com/ljharb/qs/issues/41) avoid browserifying Buffer, for #39 + +## [**2.2.4**](https://github.com/ljharb/qs/issues?milestone=13&state=closed) +- [**#38**](https://github.com/ljharb/qs/issues/38) how to handle object keys beginning with a number + +## [**2.2.3**](https://github.com/ljharb/qs/issues?milestone=12&state=closed) +- [**#37**](https://github.com/ljharb/qs/issues/37) parser discards first empty value in array +- [**#36**](https://github.com/ljharb/qs/issues/36) Update to lab 4.x + +## [**2.2.2**](https://github.com/ljharb/qs/issues?milestone=11&state=closed) +- [**#33**](https://github.com/ljharb/qs/issues/33) Error when plain object in a value +- [**#34**](https://github.com/ljharb/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty +- [**#24**](https://github.com/ljharb/qs/issues/24) Changelog? Semver? + +## [**2.2.1**](https://github.com/ljharb/qs/issues?milestone=10&state=closed) +- [**#32**](https://github.com/ljharb/qs/issues/32) account for circular references properly, closes #31 +- [**#31**](https://github.com/ljharb/qs/issues/31) qs.parse stackoverflow on circular objects + +## [**2.2.0**](https://github.com/ljharb/qs/issues?milestone=9&state=closed) +- [**#26**](https://github.com/ljharb/qs/issues/26) Don't use Buffer global if it's not present +- [**#30**](https://github.com/ljharb/qs/issues/30) Bug when merging non-object values into arrays +- [**#29**](https://github.com/ljharb/qs/issues/29) Don't call Utils.clone at the top of Utils.merge +- [**#23**](https://github.com/ljharb/qs/issues/23) Ability to not limit parameters? + +## [**2.1.0**](https://github.com/ljharb/qs/issues?milestone=8&state=closed) +- [**#22**](https://github.com/ljharb/qs/issues/22) Enable using a RegExp as delimiter + +## [**2.0.0**](https://github.com/ljharb/qs/issues?milestone=7&state=closed) +- [**#18**](https://github.com/ljharb/qs/issues/18) Why is there arrayLimit? +- [**#20**](https://github.com/ljharb/qs/issues/20) Configurable parametersLimit +- [**#21**](https://github.com/ljharb/qs/issues/21) make all limits optional, for #18, for #20 + +## [**1.2.2**](https://github.com/ljharb/qs/issues?milestone=6&state=closed) +- [**#19**](https://github.com/ljharb/qs/issues/19) Don't overwrite null values + +## [**1.2.1**](https://github.com/ljharb/qs/issues?milestone=5&state=closed) +- [**#16**](https://github.com/ljharb/qs/issues/16) ignore non-string delimiters +- [**#15**](https://github.com/ljharb/qs/issues/15) Close code block + +## [**1.2.0**](https://github.com/ljharb/qs/issues?milestone=4&state=closed) +- [**#12**](https://github.com/ljharb/qs/issues/12) Add optional delim argument +- [**#13**](https://github.com/ljharb/qs/issues/13) fix #11: flattened keys in array are now correctly parsed + +## [**1.1.0**](https://github.com/ljharb/qs/issues?milestone=3&state=closed) +- [**#7**](https://github.com/ljharb/qs/issues/7) Empty values of a POST array disappear after being submitted +- [**#9**](https://github.com/ljharb/qs/issues/9) Should not omit equals signs (=) when value is null +- [**#6**](https://github.com/ljharb/qs/issues/6) Minor grammar fix in README + +## [**1.0.2**](https://github.com/ljharb/qs/issues?milestone=2&state=closed) +- [**#5**](https://github.com/ljharb/qs/issues/5) array holes incorrectly copied into object on large index diff --git a/node_modules/typed-rest-client/node_modules/qs/LICENSE.md b/node_modules/typed-rest-client/node_modules/qs/LICENSE.md new file mode 100644 index 0000000..fecf6b6 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/LICENSE.md @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2014, Nathan LaFreniere and other [contributors](https://github.com/ljharb/qs/graphs/contributors) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/typed-rest-client/node_modules/qs/README.md b/node_modules/typed-rest-client/node_modules/qs/README.md new file mode 100644 index 0000000..84f2534 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/README.md @@ -0,0 +1,604 @@ +# qs [![Version Badge][2]][1] + +[![Build Status][3]][4] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +A querystring parsing and stringifying library with some added security. + +Lead Maintainer: [Jordan Harband](https://github.com/ljharb) + +The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). + +## Usage + +```javascript +var qs = require('qs'); +var assert = require('assert'); + +var obj = qs.parse('a=c'); +assert.deepEqual(obj, { a: 'c' }); + +var str = qs.stringify(obj); +assert.equal(str, 'a=c'); +``` + +### Parsing Objects + +[](#preventEval) +```javascript +qs.parse(string, [options]); +``` + +**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`. +For example, the string `'foo[bar]=baz'` converts to: + +```javascript +assert.deepEqual(qs.parse('foo[bar]=baz'), { + foo: { + bar: 'baz' + } +}); +``` + +When using the `plainObjects` option the parsed value is returned as a null object, created via `Object.create(null)` and as such you should be aware that prototype methods will not exist on it and a user may set those names to whatever value they like: + +```javascript +var nullObject = qs.parse('a[hasOwnProperty]=b', { plainObjects: true }); +assert.deepEqual(nullObject, { a: { hasOwnProperty: 'b' } }); +``` + +By default parameters that would overwrite properties on the object prototype are ignored, if you wish to keep the data from those fields either use `plainObjects` as mentioned above, or set `allowPrototypes` to `true` which will allow user input to overwrite those properties. *WARNING* It is generally a bad idea to enable this option as it can cause problems when attempting to use the properties that have been overwritten. Always be careful with this option. + +```javascript +var protoObject = qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }); +assert.deepEqual(protoObject, { a: { hasOwnProperty: 'b' } }); +``` + +URI encoded strings work too: + +```javascript +assert.deepEqual(qs.parse('a%5Bb%5D=c'), { + a: { b: 'c' } +}); +``` + +You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: + +```javascript +assert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), { + foo: { + bar: { + baz: 'foobarbaz' + } + } +}); +``` + +By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like +`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: + +```javascript +var expected = { + a: { + b: { + c: { + d: { + e: { + f: { + '[g][h][i]': 'j' + } + } + } + } + } + } +}; +var string = 'a[b][c][d][e][f][g][h][i]=j'; +assert.deepEqual(qs.parse(string), expected); +``` + +This depth can be overridden by passing a `depth` option to `qs.parse(string, [options])`: + +```javascript +var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); +assert.deepEqual(deep, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }); +``` + +The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. + +For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: + +```javascript +var limited = qs.parse('a=b&c=d', { parameterLimit: 1 }); +assert.deepEqual(limited, { a: 'b' }); +``` + +To bypass the leading question mark, use `ignoreQueryPrefix`: + +```javascript +var prefixed = qs.parse('?a=b&c=d', { ignoreQueryPrefix: true }); +assert.deepEqual(prefixed, { a: 'b', c: 'd' }); +``` + +An optional delimiter can also be passed: + +```javascript +var delimited = qs.parse('a=b;c=d', { delimiter: ';' }); +assert.deepEqual(delimited, { a: 'b', c: 'd' }); +``` + +Delimiters can be a regular expression too: + +```javascript +var regexed = qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); +assert.deepEqual(regexed, { a: 'b', c: 'd', e: 'f' }); +``` + +Option `allowDots` can be used to enable dot notation: + +```javascript +var withDots = qs.parse('a.b=c', { allowDots: true }); +assert.deepEqual(withDots, { a: { b: 'c' } }); +``` + +If you have to deal with legacy browsers or services, there's +also support for decoding percent-encoded octets as iso-8859-1: + +```javascript +var oldCharset = qs.parse('a=%A7', { charset: 'iso-8859-1' }); +assert.deepEqual(oldCharset, { a: '§' }); +``` + +Some services add an initial `utf8=✓` value to forms so that old +Internet Explorer versions are more likely to submit the form as +utf-8. Additionally, the server can check the value against wrong +encodings of the checkmark character and detect that a query string +or `application/x-www-form-urlencoded` body was *not* sent as +utf-8, eg. if the form had an `accept-charset` parameter or the +containing page had a different character set. + +**qs** supports this mechanism via the `charsetSentinel` option. +If specified, the `utf8` parameter will be omitted from the +returned object. It will be used to switch to `iso-8859-1`/`utf-8` +mode depending on how the checkmark is encoded. + +**Important**: When you specify both the `charset` option and the +`charsetSentinel` option, the `charset` will be overridden when +the request contains a `utf8` parameter from which the actual +charset can be deduced. In that sense the `charset` will behave +as the default charset rather than the authoritative charset. + +```javascript +var detectedAsUtf8 = qs.parse('utf8=%E2%9C%93&a=%C3%B8', { + charset: 'iso-8859-1', + charsetSentinel: true +}); +assert.deepEqual(detectedAsUtf8, { a: 'ø' }); + +// Browsers encode the checkmark as ✓ when submitting as iso-8859-1: +var detectedAsIso8859_1 = qs.parse('utf8=%26%2310003%3B&a=%F8', { + charset: 'utf-8', + charsetSentinel: true +}); +assert.deepEqual(detectedAsIso8859_1, { a: 'ø' }); +``` + +If you want to decode the `&#...;` syntax to the actual character, +you can specify the `interpretNumericEntities` option as well: + +```javascript +var detectedAsIso8859_1 = qs.parse('a=%26%239786%3B', { + charset: 'iso-8859-1', + interpretNumericEntities: true +}); +assert.deepEqual(detectedAsIso8859_1, { a: '☺' }); +``` + +It also works when the charset has been detected in `charsetSentinel` +mode. + +### Parsing Arrays + +**qs** can also parse arrays using a similar `[]` notation: + +```javascript +var withArray = qs.parse('a[]=b&a[]=c'); +assert.deepEqual(withArray, { a: ['b', 'c'] }); +``` + +You may specify an index as well: + +```javascript +var withIndexes = qs.parse('a[1]=c&a[0]=b'); +assert.deepEqual(withIndexes, { a: ['b', 'c'] }); +``` + +Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number +to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving +their order: + +```javascript +var noSparse = qs.parse('a[1]=b&a[15]=c'); +assert.deepEqual(noSparse, { a: ['b', 'c'] }); +``` + +Note that an empty string is also a value, and will be preserved: + +```javascript +var withEmptyString = qs.parse('a[]=&a[]=b'); +assert.deepEqual(withEmptyString, { a: ['', 'b'] }); + +var withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c'); +assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] }); +``` + +**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will +instead be converted to an object with the index as the key. This is needed to handle cases when someone sent, for example, `a[999999999]` and it will take significant time to iterate over this huge array. + +```javascript +var withMaxIndex = qs.parse('a[100]=b'); +assert.deepEqual(withMaxIndex, { a: { '100': 'b' } }); +``` + +This limit can be overridden by passing an `arrayLimit` option: + +```javascript +var withArrayLimit = qs.parse('a[1]=b', { arrayLimit: 0 }); +assert.deepEqual(withArrayLimit, { a: { '1': 'b' } }); +``` + +To disable array parsing entirely, set `parseArrays` to `false`. + +```javascript +var noParsingArrays = qs.parse('a[]=b', { parseArrays: false }); +assert.deepEqual(noParsingArrays, { a: { '0': 'b' } }); +``` + +If you mix notations, **qs** will merge the two items into an object: + +```javascript +var mixedNotation = qs.parse('a[0]=b&a[b]=c'); +assert.deepEqual(mixedNotation, { a: { '0': 'b', b: 'c' } }); +``` + +You can also create arrays of objects: + +```javascript +var arraysOfObjects = qs.parse('a[][b]=c'); +assert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] }); +``` + +Some people use comma to join array, **qs** can parse it: +```javascript +var arraysOfObjects = qs.parse('a=b,c', { comma: true }) +assert.deepEqual(arraysOfObjects, { a: ['b', 'c'] }) +``` +(_this cannot convert nested objects, such as `a={b:1},{c:d}`_) + +### Stringifying + +[](#preventEval) +```javascript +qs.stringify(object, [options]); +``` + +When stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect: + +```javascript +assert.equal(qs.stringify({ a: 'b' }), 'a=b'); +assert.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); +``` + +This encoding can be disabled by setting the `encode` option to `false`: + +```javascript +var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false }); +assert.equal(unencoded, 'a[b]=c'); +``` + +Encoding can be disabled for keys by setting the `encodeValuesOnly` option to `true`: +```javascript +var encodedValues = qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } +); +assert.equal(encodedValues,'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h'); +``` + +This encoding can also be replaced by a custom encoding method set as `encoder` option: + +```javascript +var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) { + // Passed in values `a`, `b`, `c` + return // Return encoded string +}}) +``` + +_(Note: the `encoder` option does not apply if `encode` is `false`)_ + +Analogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values: + +```javascript +var decoded = qs.parse('x=z', { decoder: function (str) { + // Passed in values `x`, `z` + return // Return decoded string +}}) +``` + +You can encode keys and values using different logic by using the type argument provided to the encoder: + +```javascript +var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str, defaultEncoder, charset, type) { + if (type === 'key') { + return // Encoded key + } else if (type === 'value') { + return // Encoded value + } +}}) +``` + +The type argument is also provided to the decoder: + +```javascript +var decoded = qs.parse('x=z', { decoder: function (str, defaultEncoder, charset, type) { + if (type === 'key') { + return // Decoded key + } else if (type === 'value') { + return // Decoded value + } +}}) +``` + +Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. + +When arrays are stringified, by default they are given explicit indices: + +```javascript +qs.stringify({ a: ['b', 'c', 'd'] }); +// 'a[0]=b&a[1]=c&a[2]=d' +``` + +You may override this by setting the `indices` option to `false`: + +```javascript +qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); +// 'a=b&a=c&a=d' +``` + +You may use the `arrayFormat` option to specify the format of the output array: + +```javascript +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }) +// 'a[0]=b&a[1]=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }) +// 'a[]=b&a[]=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) +// 'a=b&a=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' }) +// 'a=b,c' +``` + +When objects are stringified, by default they use bracket notation: + +```javascript +qs.stringify({ a: { b: { c: 'd', e: 'f' } } }); +// 'a[b][c]=d&a[b][e]=f' +``` + +You may override this to use dot notation by setting the `allowDots` option to `true`: + +```javascript +qs.stringify({ a: { b: { c: 'd', e: 'f' } } }, { allowDots: true }); +// 'a.b.c=d&a.b.e=f' +``` + +Empty strings and null values will omit the value, but the equals sign (=) remains in place: + +```javascript +assert.equal(qs.stringify({ a: '' }), 'a='); +``` + +Key with no values (such as an empty object or array) will return nothing: + +```javascript +assert.equal(qs.stringify({ a: [] }), ''); +assert.equal(qs.stringify({ a: {} }), ''); +assert.equal(qs.stringify({ a: [{}] }), ''); +assert.equal(qs.stringify({ a: { b: []} }), ''); +assert.equal(qs.stringify({ a: { b: {}} }), ''); +``` + +Properties that are set to `undefined` will be omitted entirely: + +```javascript +assert.equal(qs.stringify({ a: null, b: undefined }), 'a='); +``` + +The query string may optionally be prepended with a question mark: + +```javascript +assert.equal(qs.stringify({ a: 'b', c: 'd' }, { addQueryPrefix: true }), '?a=b&c=d'); +``` + +The delimiter may be overridden with stringify as well: + +```javascript +assert.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); +``` + +If you only want to override the serialization of `Date` objects, you can provide a `serializeDate` option: + +```javascript +var date = new Date(7); +assert.equal(qs.stringify({ a: date }), 'a=1970-01-01T00:00:00.007Z'.replace(/:/g, '%3A')); +assert.equal( + qs.stringify({ a: date }, { serializeDate: function (d) { return d.getTime(); } }), + 'a=7' +); +``` + +You may use the `sort` option to affect the order of parameter keys: + +```javascript +function alphabeticalSort(a, b) { + return a.localeCompare(b); +} +assert.equal(qs.stringify({ a: 'c', z: 'y', b : 'f' }, { sort: alphabeticalSort }), 'a=c&b=f&z=y'); +``` + +Finally, you can use the `filter` option to restrict which keys will be included in the stringified output. +If you pass a function, it will be called for each key to obtain the replacement value. Otherwise, if you +pass an array, it will be used to select properties and array indices for stringification: + +```javascript +function filterFunc(prefix, value) { + if (prefix == 'b') { + // Return an `undefined` value to omit a property. + return; + } + if (prefix == 'e[f]') { + return value.getTime(); + } + if (prefix == 'e[g][0]') { + return value * 2; + } + return value; +} +qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc }); +// 'a=b&c=d&e[f]=123&e[g][0]=4' +qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] }); +// 'a=b&e=f' +qs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] }); +// 'a[0]=b&a[2]=d' +``` + +### Handling of `null` values + +By default, `null` values are treated like empty strings: + +```javascript +var withNull = qs.stringify({ a: null, b: '' }); +assert.equal(withNull, 'a=&b='); +``` + +Parsing does not distinguish between parameters with and without equal signs. Both are converted to empty strings. + +```javascript +var equalsInsensitive = qs.parse('a&b='); +assert.deepEqual(equalsInsensitive, { a: '', b: '' }); +``` + +To distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null` +values have no `=` sign: + +```javascript +var strictNull = qs.stringify({ a: null, b: '' }, { strictNullHandling: true }); +assert.equal(strictNull, 'a&b='); +``` + +To parse values without `=` back to `null` use the `strictNullHandling` flag: + +```javascript +var parsedStrictNull = qs.parse('a&b=', { strictNullHandling: true }); +assert.deepEqual(parsedStrictNull, { a: null, b: '' }); +``` + +To completely skip rendering keys with `null` values, use the `skipNulls` flag: + +```javascript +var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true }); +assert.equal(nullsSkipped, 'a=b'); +``` + +If you're communicating with legacy systems, you can switch to `iso-8859-1` +using the `charset` option: + +```javascript +var iso = qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }); +assert.equal(iso, '%E6=%E6'); +``` + +Characters that don't exist in `iso-8859-1` will be converted to numeric +entities, similar to what browsers do: + +```javascript +var numeric = qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }); +assert.equal(numeric, 'a=%26%239786%3B'); +``` + +You can use the `charsetSentinel` option to announce the character by +including an `utf8=✓` parameter with the proper encoding if the checkmark, +similar to what Ruby on Rails and others do when submitting forms. + +```javascript +var sentinel = qs.stringify({ a: '☺' }, { charsetSentinel: true }); +assert.equal(sentinel, 'utf8=%E2%9C%93&a=%E2%98%BA'); + +var isoSentinel = qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }); +assert.equal(isoSentinel, 'utf8=%26%2310003%3B&a=%E6'); +``` + +### Dealing with special character sets + +By default the encoding and decoding of characters is done in `utf-8`, +and `iso-8859-1` support is also built in via the `charset` parameter. + +If you wish to encode querystrings to a different character set (i.e. +[Shift JIS](https://en.wikipedia.org/wiki/Shift_JIS)) you can use the +[`qs-iconv`](https://github.com/martinheidegger/qs-iconv) library: + +```javascript +var encoder = require('qs-iconv/encoder')('shift_jis'); +var shiftJISEncoded = qs.stringify({ a: 'こんにちは!' }, { encoder: encoder }); +assert.equal(shiftJISEncoded, 'a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I'); +``` + +This also works for decoding of query strings: + +```javascript +var decoder = require('qs-iconv/decoder')('shift_jis'); +var obj = qs.parse('a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I', { decoder: decoder }); +assert.deepEqual(obj, { a: 'こんにちは!' }); +``` + +### RFC 3986 and RFC 1738 space encoding + +RFC3986 used as default option and encodes ' ' to *%20* which is backward compatible. +In the same time, output can be stringified as per RFC1738 with ' ' equal to '+'. + +``` +assert.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); +assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC3986' }), 'a=b%20c'); +assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC1738' }), 'a=b+c'); +``` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +## qs for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of qs and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-qs?utm_source=npm-qs&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + +[1]: https://npmjs.org/package/qs +[2]: http://versionbadg.es/ljharb/qs.svg +[3]: https://api.travis-ci.org/ljharb/qs.svg +[4]: https://travis-ci.org/ljharb/qs +[5]: https://david-dm.org/ljharb/qs.svg +[6]: https://david-dm.org/ljharb/qs +[7]: https://david-dm.org/ljharb/qs/dev-status.svg +[8]: https://david-dm.org/ljharb/qs?type=dev +[9]: https://ci.testling.com/ljharb/qs.png +[10]: https://ci.testling.com/ljharb/qs +[11]: https://nodei.co/npm/qs.png?downloads=true&stars=true +[license-image]: http://img.shields.io/npm/l/qs.svg +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/qs.svg +[downloads-url]: http://npm-stat.com/charts.html?package=qs diff --git a/node_modules/typed-rest-client/node_modules/qs/dist/qs.js b/node_modules/typed-rest-client/node_modules/qs/dist/qs.js new file mode 100644 index 0000000..a6204f2 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/dist/qs.js @@ -0,0 +1,825 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i -1) { + return val.split(','); + } + + return val; +}; + +// This is what browsers will submit when the ✓ character occurs in an +// application/x-www-form-urlencoded body and the encoding of the page containing +// the form is iso-8859-1, or when the submitted form has an accept-charset +// attribute of iso-8859-1. Presumably also with other charsets that do not contain +// the ✓ character, such as us-ascii. +var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') + +// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. +var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓') + +var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; + var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + var skipIndex = -1; // Keep track of where the utf8 sentinel was found + var i; + + var charset = options.charset; + if (options.charsetSentinel) { + for (i = 0; i < parts.length; ++i) { + if (parts[i].indexOf('utf8=') === 0) { + if (parts[i] === charsetSentinel) { + charset = 'utf-8'; + } else if (parts[i] === isoSentinel) { + charset = 'iso-8859-1'; + } + skipIndex = i; + i = parts.length; // The eslint settings do not allow break; + } + } + } + + for (i = 0; i < parts.length; ++i) { + if (i === skipIndex) { + continue; + } + var part = parts[i]; + + var bracketEqualsPos = part.indexOf(']='); + var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; + + var key, val; + if (pos === -1) { + key = options.decoder(part, defaults.decoder, charset, 'key'); + val = options.strictNullHandling ? null : ''; + } else { + key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key'); + val = utils.maybeMap( + parseArrayValue(part.slice(pos + 1), options), + function (encodedVal) { + return options.decoder(encodedVal, defaults.decoder, charset, 'value'); + } + ); + } + + if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { + val = interpretNumericEntities(val); + } + + if (part.indexOf('[]=') > -1) { + val = isArray(val) ? [val] : val; + } + + if (has.call(obj, key)) { + obj[key] = utils.combine(obj[key], val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function (chain, val, options, valuesParsed) { + var leaf = valuesParsed ? val : parseArrayValue(val, options); + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]' && options.parseArrays) { + obj = [].concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === '') { + obj = { 0: leaf }; + } else if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; // eslint-disable-line no-param-reassign + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = options.depth > 0 && brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options, valuesParsed); +}; + +var normalizeParseOptions = function normalizeParseOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; + + return { + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + // eslint-disable-next-line no-implicit-coercion, no-extra-parens + depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (str, opts) { + var options = normalizeParseOptions(opts); + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string'); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; + +},{"./utils":5}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var formats = require('./formats'); +var has = Object.prototype.hasOwnProperty; + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { + return prefix + '[]'; + }, + comma: 'comma', + indices: function indices(prefix, key) { + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { + return prefix; + } +}; + +var isArray = Array.isArray; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + +var toISO = Date.prototype.toISOString; + +var defaultFormat = formats['default']; +var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: 'utf-8', + charsetSentinel: false, + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + format: defaultFormat, + formatter: formats.formatters[defaultFormat], + // deprecated + indices: false, + serializeDate: function serializeDate(date) { + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var isNonNullishPrimitive = function isNonNullishPrimitive(v) { + return typeof v === 'string' + || typeof v === 'number' + || typeof v === 'boolean' + || typeof v === 'symbol' + || typeof v === 'bigint'; +}; + +var stringify = function stringify( + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (generateArrayPrefix === 'comma' && isArray(obj)) { + obj = utils.maybeMap(obj, function (value) { + if (value instanceof Date) { + return serializeDate(value); + } + return value; + }).join(','); + } + + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key') : prefix; + } + + obj = ''; + } + + if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key'); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value'))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + var value = obj[key]; + + if (skipNulls && value === null) { + continue; + } + + var keyPrefix = isArray(obj) + ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix + : prefix + (allowDots ? '.' + key : '[' + key + ']'); + + pushToArray(values, stringify( + value, + keyPrefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset + )); + } + + return values; +}; + +var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var charset = opts.charset || defaults.charset; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var format = formats['default']; + if (typeof opts.format !== 'undefined') { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError('Unknown format option provided.'); + } + format = opts.format; + } + var formatter = formats.formatters[format]; + + var filter = defaults.filter; + if (typeof opts.filter === 'function' || isArray(opts.filter)) { + filter = opts.filter; + } + + return { + addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter: filter, + formatter: formatter, + serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === 'function' ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && 'indices' in opts) { + arrayFormat = opts.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (options.sort) { + objKeys.sort(options.sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (options.skipNulls && obj[key] === null) { + continue; + } + pushToArray(keys, stringify( + obj[key], + key, + generateArrayPrefix, + options.strictNullHandling, + options.skipNulls, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.formatter, + options.encodeValuesOnly, + options.charset + )); + } + + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + if (options.charsetSentinel) { + if (options.charset === 'iso-8859-1') { + // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark + prefix += 'utf8=%26%2310003%3B&'; + } else { + // encodeURIComponent('✓') + prefix += 'utf8=%E2%9C%93&'; + } + } + + return joined.length > 0 ? prefix + joined : ''; +}; + +},{"./formats":1,"./utils":5}],5:[function(require,module,exports){ +'use strict'; + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +var compactQueue = function compactQueue(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + + if (isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } +}; + +var arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +var merge = function merge(target, source, options) { + /* eslint no-param-reassign: 0 */ + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (isArray(target)) { + target.push(source); + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (!target || typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + + if (isArray(target) && isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + var targetItem = target[i]; + if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { + target[i] = merge(targetItem, item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, ' '); + if (charset === 'iso-8859-1') { + // unescape never throws, no try...catch needed: + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + // utf-8 + try { + return decodeURIComponent(strWithoutPlus); + } catch (e) { + return strWithoutPlus; + } +}; + +var encode = function encode(str, defaultEncoder, charset) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = str; + if (typeof str === 'symbol') { + string = Symbol.prototype.toString.call(str); + } else if (typeof str !== 'string') { + string = String(str); + } + + if (charset === 'iso-8859-1') { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { + return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; + }); + } + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); + } + } + } + + compactQueue(queue); + + return value; +}; + +var isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +var isBuffer = function isBuffer(obj) { + if (!obj || typeof obj !== 'object') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +var combine = function combine(a, b) { + return [].concat(a, b); +}; + +var maybeMap = function maybeMap(val, fn) { + if (isArray(val)) { + var mapped = []; + for (var i = 0; i < val.length; i += 1) { + mapped.push(fn(val[i])); + } + return mapped; + } + return fn(val); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + combine: combine, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + maybeMap: maybeMap, + merge: merge +}; + +},{}]},{},[2])(2) +}); diff --git a/node_modules/typed-rest-client/node_modules/qs/lib/formats.js b/node_modules/typed-rest-client/node_modules/qs/lib/formats.js new file mode 100644 index 0000000..a4ecca7 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/lib/formats.js @@ -0,0 +1,26 @@ +'use strict'; + +var replace = String.prototype.replace; +var percentTwenties = /%20/g; + +var util = require('./utils'); + +var Format = { + RFC1738: 'RFC1738', + RFC3986: 'RFC3986' +}; + +module.exports = util.assign( + { + 'default': Format.RFC3986, + formatters: { + RFC1738: function (value) { + return replace.call(value, percentTwenties, '+'); + }, + RFC3986: function (value) { + return String(value); + } + } + }, + Format +); diff --git a/node_modules/typed-rest-client/node_modules/qs/lib/index.js b/node_modules/typed-rest-client/node_modules/qs/lib/index.js new file mode 100644 index 0000000..0d6a97d --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/lib/index.js @@ -0,0 +1,11 @@ +'use strict'; + +var stringify = require('./stringify'); +var parse = require('./parse'); +var formats = require('./formats'); + +module.exports = { + formats: formats, + parse: parse, + stringify: stringify +}; diff --git a/node_modules/typed-rest-client/node_modules/qs/lib/parse.js b/node_modules/typed-rest-client/node_modules/qs/lib/parse.js new file mode 100644 index 0000000..1751c7b --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/lib/parse.js @@ -0,0 +1,257 @@ +'use strict'; + +var utils = require('./utils'); + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var defaults = { + allowDots: false, + allowPrototypes: false, + arrayLimit: 20, + charset: 'utf-8', + charsetSentinel: false, + comma: false, + decoder: utils.decode, + delimiter: '&', + depth: 5, + ignoreQueryPrefix: false, + interpretNumericEntities: false, + parameterLimit: 1000, + parseArrays: true, + plainObjects: false, + strictNullHandling: false +}; + +var interpretNumericEntities = function (str) { + return str.replace(/&#(\d+);/g, function ($0, numberStr) { + return String.fromCharCode(parseInt(numberStr, 10)); + }); +}; + +var parseArrayValue = function (val, options) { + if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) { + return val.split(','); + } + + return val; +}; + +// This is what browsers will submit when the ✓ character occurs in an +// application/x-www-form-urlencoded body and the encoding of the page containing +// the form is iso-8859-1, or when the submitted form has an accept-charset +// attribute of iso-8859-1. Presumably also with other charsets that do not contain +// the ✓ character, such as us-ascii. +var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') + +// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. +var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓') + +var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; + var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + var skipIndex = -1; // Keep track of where the utf8 sentinel was found + var i; + + var charset = options.charset; + if (options.charsetSentinel) { + for (i = 0; i < parts.length; ++i) { + if (parts[i].indexOf('utf8=') === 0) { + if (parts[i] === charsetSentinel) { + charset = 'utf-8'; + } else if (parts[i] === isoSentinel) { + charset = 'iso-8859-1'; + } + skipIndex = i; + i = parts.length; // The eslint settings do not allow break; + } + } + } + + for (i = 0; i < parts.length; ++i) { + if (i === skipIndex) { + continue; + } + var part = parts[i]; + + var bracketEqualsPos = part.indexOf(']='); + var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; + + var key, val; + if (pos === -1) { + key = options.decoder(part, defaults.decoder, charset, 'key'); + val = options.strictNullHandling ? null : ''; + } else { + key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key'); + val = utils.maybeMap( + parseArrayValue(part.slice(pos + 1), options), + function (encodedVal) { + return options.decoder(encodedVal, defaults.decoder, charset, 'value'); + } + ); + } + + if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { + val = interpretNumericEntities(val); + } + + if (part.indexOf('[]=') > -1) { + val = isArray(val) ? [val] : val; + } + + if (has.call(obj, key)) { + obj[key] = utils.combine(obj[key], val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function (chain, val, options, valuesParsed) { + var leaf = valuesParsed ? val : parseArrayValue(val, options); + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]' && options.parseArrays) { + obj = [].concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === '') { + obj = { 0: leaf }; + } else if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; // eslint-disable-line no-param-reassign + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = options.depth > 0 && brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options, valuesParsed); +}; + +var normalizeParseOptions = function normalizeParseOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; + + return { + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + // eslint-disable-next-line no-implicit-coercion, no-extra-parens + depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (str, opts) { + var options = normalizeParseOptions(opts); + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string'); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; diff --git a/node_modules/typed-rest-client/node_modules/qs/lib/stringify.js b/node_modules/typed-rest-client/node_modules/qs/lib/stringify.js new file mode 100644 index 0000000..5d22260 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/lib/stringify.js @@ -0,0 +1,271 @@ +'use strict'; + +var utils = require('./utils'); +var formats = require('./formats'); +var has = Object.prototype.hasOwnProperty; + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { + return prefix + '[]'; + }, + comma: 'comma', + indices: function indices(prefix, key) { + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { + return prefix; + } +}; + +var isArray = Array.isArray; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + +var toISO = Date.prototype.toISOString; + +var defaultFormat = formats['default']; +var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: 'utf-8', + charsetSentinel: false, + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + format: defaultFormat, + formatter: formats.formatters[defaultFormat], + // deprecated + indices: false, + serializeDate: function serializeDate(date) { + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var isNonNullishPrimitive = function isNonNullishPrimitive(v) { + return typeof v === 'string' + || typeof v === 'number' + || typeof v === 'boolean' + || typeof v === 'symbol' + || typeof v === 'bigint'; +}; + +var stringify = function stringify( + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (generateArrayPrefix === 'comma' && isArray(obj)) { + obj = utils.maybeMap(obj, function (value) { + if (value instanceof Date) { + return serializeDate(value); + } + return value; + }).join(','); + } + + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key') : prefix; + } + + obj = ''; + } + + if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key'); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value'))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + var value = obj[key]; + + if (skipNulls && value === null) { + continue; + } + + var keyPrefix = isArray(obj) + ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix + : prefix + (allowDots ? '.' + key : '[' + key + ']'); + + pushToArray(values, stringify( + value, + keyPrefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset + )); + } + + return values; +}; + +var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var charset = opts.charset || defaults.charset; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var format = formats['default']; + if (typeof opts.format !== 'undefined') { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError('Unknown format option provided.'); + } + format = opts.format; + } + var formatter = formats.formatters[format]; + + var filter = defaults.filter; + if (typeof opts.filter === 'function' || isArray(opts.filter)) { + filter = opts.filter; + } + + return { + addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter: filter, + formatter: formatter, + serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === 'function' ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && 'indices' in opts) { + arrayFormat = opts.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (options.sort) { + objKeys.sort(options.sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (options.skipNulls && obj[key] === null) { + continue; + } + pushToArray(keys, stringify( + obj[key], + key, + generateArrayPrefix, + options.strictNullHandling, + options.skipNulls, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.formatter, + options.encodeValuesOnly, + options.charset + )); + } + + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + if (options.charsetSentinel) { + if (options.charset === 'iso-8859-1') { + // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark + prefix += 'utf8=%26%2310003%3B&'; + } else { + // encodeURIComponent('✓') + prefix += 'utf8=%E2%9C%93&'; + } + } + + return joined.length > 0 ? prefix + joined : ''; +}; diff --git a/node_modules/typed-rest-client/node_modules/qs/lib/utils.js b/node_modules/typed-rest-client/node_modules/qs/lib/utils.js new file mode 100644 index 0000000..98ab193 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/lib/utils.js @@ -0,0 +1,248 @@ +'use strict'; + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +var compactQueue = function compactQueue(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + + if (isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } +}; + +var arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +var merge = function merge(target, source, options) { + /* eslint no-param-reassign: 0 */ + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (isArray(target)) { + target.push(source); + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (!target || typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + + if (isArray(target) && isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + var targetItem = target[i]; + if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { + target[i] = merge(targetItem, item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, ' '); + if (charset === 'iso-8859-1') { + // unescape never throws, no try...catch needed: + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + // utf-8 + try { + return decodeURIComponent(strWithoutPlus); + } catch (e) { + return strWithoutPlus; + } +}; + +var encode = function encode(str, defaultEncoder, charset) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = str; + if (typeof str === 'symbol') { + string = Symbol.prototype.toString.call(str); + } else if (typeof str !== 'string') { + string = String(str); + } + + if (charset === 'iso-8859-1') { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { + return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; + }); + } + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); + } + } + } + + compactQueue(queue); + + return value; +}; + +var isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +var isBuffer = function isBuffer(obj) { + if (!obj || typeof obj !== 'object') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +var combine = function combine(a, b) { + return [].concat(a, b); +}; + +var maybeMap = function maybeMap(val, fn) { + if (isArray(val)) { + var mapped = []; + for (var i = 0; i < val.length; i += 1) { + mapped.push(fn(val[i])); + } + return mapped; + } + return fn(val); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + combine: combine, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + maybeMap: maybeMap, + merge: merge +}; diff --git a/node_modules/typed-rest-client/node_modules/qs/package.json b/node_modules/typed-rest-client/node_modules/qs/package.json new file mode 100644 index 0000000..475ed63 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/package.json @@ -0,0 +1,69 @@ +{ + "name": "qs", + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "homepage": "https://github.com/ljharb/qs", + "version": "6.9.4", + "repository": { + "type": "git", + "url": "https://github.com/ljharb/qs.git" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "main": "lib/index.js", + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "keywords": [ + "querystring", + "qs", + "query", + "url", + "parse", + "stringify" + ], + "engines": { + "node": ">=0.6" + }, + "dependencies": {}, + "devDependencies": { + "@ljharb/eslint-config": "^16.0.0", + "browserify": "^16.5.1", + "covert": "^1.1.1", + "eclint": "^2.8.1", + "eslint": "^6.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.3", + "has-symbols": "^1.0.1", + "iconv-lite": "^0.5.1", + "mkdirp": "^0.5.4", + "object-inspect": "^1.7.0", + "qs-iconv": "^1.0.4", + "safe-publish-latest": "^1.1.4", + "safer-buffer": "^2.1.2", + "tape": "^5.0.0" + }, + "scripts": { + "prepublish": "safe-publish-latest && npm run dist", + "pretest": "npm run --silent readme && npm run --silent lint", + "test": "npm run --silent coverage", + "tests-only": "node test", + "posttest": "npx aud --production", + "readme": "evalmd README.md", + "postlint": "eclint check * lib/* test/*", + "lint": "eslint lib/*.js test/*.js", + "coverage": "covert test", + "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js" + }, + "license": "BSD-3-Clause", + "greenkeeper": { + "ignore": [ + "iconv-lite", + "mkdirp" + ] + } +} diff --git a/node_modules/typed-rest-client/node_modules/qs/test/.eslintrc b/node_modules/typed-rest-client/node_modules/qs/test/.eslintrc new file mode 100644 index 0000000..8ab8536 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/test/.eslintrc @@ -0,0 +1,18 @@ +{ + "rules": { + "array-bracket-newline": 0, + "array-element-newline": 0, + "consistent-return": 2, + "function-paren-newline": 0, + "max-lines": 0, + "max-lines-per-function": 0, + "max-nested-callbacks": [2, 3], + "max-statements": 0, + "no-buffer-constructor": 0, + "no-extend-native": 0, + "no-magic-numbers": 0, + "no-throw-literal": 0, + "object-curly-newline": 0, + "sort-keys": 0, + } +} diff --git a/node_modules/typed-rest-client/node_modules/qs/test/index.js b/node_modules/typed-rest-client/node_modules/qs/test/index.js new file mode 100644 index 0000000..5e6bc8f --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/test/index.js @@ -0,0 +1,7 @@ +'use strict'; + +require('./parse'); + +require('./stringify'); + +require('./utils'); diff --git a/node_modules/typed-rest-client/node_modules/qs/test/parse.js b/node_modules/typed-rest-client/node_modules/qs/test/parse.js new file mode 100644 index 0000000..b6ec1b7 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/test/parse.js @@ -0,0 +1,772 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var utils = require('../lib/utils'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; + +test('parse()', function (t) { + t.test('parses a simple string', function (st) { + st.deepEqual(qs.parse('0=foo'), { 0: 'foo' }); + st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' }); + st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } }); + st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } }); + st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } }); + st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null }); + st.deepEqual(qs.parse('foo'), { foo: '' }); + st.deepEqual(qs.parse('foo='), { foo: '' }); + st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' }); + st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' }); + st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' }); + st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' }); + st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' }); + st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null }); + st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' }); + st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), { + cht: 'p3', + chd: 't:60,40', + chs: '250x100', + chl: 'Hello|World' + }); + st.end(); + }); + + t.test('arrayFormat: brackets allows only explicit arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'brackets' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'brackets' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'brackets' }), { a: 'b,c' }); + st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'brackets' }), { a: ['b', 'c'] }); + st.end(); + }); + + t.test('arrayFormat: indices allows only indexed arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'indices' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'indices' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'indices' }), { a: 'b,c' }); + st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'indices' }), { a: ['b', 'c'] }); + st.end(); + }); + + t.test('arrayFormat: comma allows only comma-separated arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'comma' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'comma' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'comma' }), { a: 'b,c' }); + st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'comma' }), { a: ['b', 'c'] }); + st.end(); + }); + + t.test('arrayFormat: repeat allows only repeated values', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'repeat' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'repeat' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'repeat' }), { a: 'b,c' }); + st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'repeat' }), { a: ['b', 'c'] }); + st.end(); + }); + + t.test('allows enabling dot notation', function (st) { + st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' }); + st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string'); + t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string'); + t.deepEqual( + qs.parse('a[b][c][d][e][f][g][h]=i'), + { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }, + 'defaults to a depth of 5' + ); + + t.test('only parses one level when depth = 1', function (st) { + st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } }); + st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } }); + st.end(); + }); + + t.test('uses original key when depth = 0', function (st) { + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { depth: 0 }), { 'a[0]': 'b', 'a[1]': 'c' }); + st.deepEqual(qs.parse('a[0][0]=b&a[0][1]=c&a[1]=d&e=2', { depth: 0 }), { 'a[0][0]': 'b', 'a[0][1]': 'c', 'a[1]': 'd', e: '2' }); + st.end(); + }); + + t.test('uses original key when depth = false', function (st) { + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { depth: false }), { 'a[0]': 'b', 'a[1]': 'c' }); + st.deepEqual(qs.parse('a[0][0]=b&a[0][1]=c&a[1]=d&e=2', { depth: false }), { 'a[0][0]': 'b', 'a[0][1]': 'c', 'a[1]': 'd', e: '2' }); + st.end(); + }); + + t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array'); + + t.test('parses an explicit array', function (st) { + st.deepEqual(qs.parse('a[]=b'), { a: ['b'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] }); + st.end(); + }); + + t.test('parses a mix of simple and explicit arrays', function (st) { + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a[1]=b&a=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a=b&a[1]=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + + st.end(); + }); + + t.test('parses a nested array', function (st) { + st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } }); + st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } }); + st.end(); + }); + + t.test('allows to specify array indices', function (st) { + st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] }); + st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 20 }), { a: ['c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 0 }), { a: { 1: 'c' } }); + st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] }); + st.end(); + }); + + t.test('limits specific array indices to arrayLimit', function (st) { + st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: ['a'] }); + st.deepEqual(qs.parse('a[21]=a', { arrayLimit: 20 }), { a: { 21: 'a' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number'); + + t.test('supports encoded = signs', function (st) { + st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' }); + st.end(); + }); + + t.test('is ok with url encoded strings', function (st) { + st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } }); + st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } }); + st.end(); + }); + + t.test('allows brackets in the value', function (st) { + st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' }); + st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' }); + st.end(); + }); + + t.test('allows empty values', function (st) { + st.deepEqual(qs.parse(''), {}); + st.deepEqual(qs.parse(null), {}); + st.deepEqual(qs.parse(undefined), {}); + st.end(); + }); + + t.test('transforms arrays to objects', function (st) { + st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { 0: 'b', t: 'u' } }); + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { 0: 'b', t: 'u', hasOwnProperty: 'c' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { 0: 'b', x: 'y' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { 0: 'b', hasOwnProperty: 'c', x: 'y' } }); + st.end(); + }); + + t.test('transforms arrays to objects (dot notation)', function (st) { + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } }); + st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] }); + st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + st.end(); + }); + + t.test('correctly prunes undefined values when converting an array to an object', function (st) { + st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { 2: 'b', 99999999: 'c' } }); + st.end(); + }); + + t.test('supports malformed uri characters', function (st) { + st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null }); + st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' }); + st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' }); + st.end(); + }); + + t.test('doesn\'t produce empty keys', function (st) { + st.deepEqual(qs.parse('_r=1&'), { _r: '1' }); + st.end(); + }); + + t.test('cannot access Object prototype', function (st) { + qs.parse('constructor[prototype][bad]=bad'); + qs.parse('bad[constructor][prototype][bad]=bad'); + st.equal(typeof Object.prototype.bad, 'undefined'); + st.end(); + }); + + t.test('parses arrays of objects', function (st) { + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] }); + st.end(); + }); + + t.test('allows for empty strings in arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] }); + + st.deepEqual( + qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 20 + array indices: null then empty string works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 0 + array brackets: null then empty string works' + ); + + st.deepEqual( + qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 20 + array indices: empty string then null works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 0 + array brackets: empty string then null works' + ); + + st.deepEqual( + qs.parse('a[]=&a[]=b&a[]=c'), + { a: ['', 'b', 'c'] }, + 'array brackets: empty strings work' + ); + st.end(); + }); + + t.test('compacts sparse arrays', function (st) { + st.deepEqual(qs.parse('a[10]=1&a[2]=2', { arrayLimit: 20 }), { a: ['2', '1'] }); + st.deepEqual(qs.parse('a[1][b][2][c]=1', { arrayLimit: 20 }), { a: [{ b: [{ c: '1' }] }] }); + st.deepEqual(qs.parse('a[1][2][3][c]=1', { arrayLimit: 20 }), { a: [[[{ c: '1' }]]] }); + st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { arrayLimit: 20 }), { a: [[[{ c: ['1'] }]]] }); + st.end(); + }); + + t.test('parses semi-parsed strings', function (st) { + st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } }); + st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } }); + st.end(); + }); + + t.test('parses buffers correctly', function (st) { + var b = SaferBuffer.from('test'); + st.deepEqual(qs.parse({ a: b }), { a: b }); + st.end(); + }); + + t.test('parses jquery-param strings', function (st) { + // readable = 'filter[0][]=int1&filter[0][]==&filter[0][]=77&filter[]=and&filter[2][]=int2&filter[2][]==&filter[2][]=8' + var encoded = 'filter%5B0%5D%5B%5D=int1&filter%5B0%5D%5B%5D=%3D&filter%5B0%5D%5B%5D=77&filter%5B%5D=and&filter%5B2%5D%5B%5D=int2&filter%5B2%5D%5B%5D=%3D&filter%5B2%5D%5B%5D=8'; + var expected = { filter: [['int1', '=', '77'], 'and', ['int2', '=', '8']] }; + st.deepEqual(qs.parse(encoded), expected); + st.end(); + }); + + t.test('continues parsing when no parent is found', function (st) { + st.deepEqual(qs.parse('[]=&a=b'), { 0: '', a: 'b' }); + st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { 0: null, a: 'b' }); + st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' }); + st.end(); + }); + + t.test('does not error when parsing a very long array', function (st) { + var str = 'a[]=a'; + while (Buffer.byteLength(str) < 128 * 1024) { + str = str + '&' + str; + } + + st.doesNotThrow(function () { + qs.parse(str); + }); + + st.end(); + }); + + t.test('should not throw when a native prototype has an enumerable property', function (st) { + Object.prototype.crash = ''; + Array.prototype.crash = ''; + st.doesNotThrow(qs.parse.bind(null, 'a=b')); + st.deepEqual(qs.parse('a=b'), { a: 'b' }); + st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c')); + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + delete Object.prototype.crash; + delete Array.prototype.crash; + st.end(); + }); + + t.test('parses a string with an alternative string delimiter', function (st) { + st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('parses a string with an alternative RegExp delimiter', function (st) { + st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not use non-splittable objects as delimiters', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding parameter limit', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' }); + st.end(); + }); + + t.test('allows setting the parameter limit to Infinity', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding array limit', function (st) { + st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { 0: 'b' } }); + st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } }); + st.end(); + }); + + t.test('allows disabling array parsing', function (st) { + var indices = qs.parse('a[0]=b&a[1]=c', { parseArrays: false }); + st.deepEqual(indices, { a: { 0: 'b', 1: 'c' } }); + st.equal(Array.isArray(indices.a), false, 'parseArrays:false, indices case is not an array'); + + var emptyBrackets = qs.parse('a[]=b', { parseArrays: false }); + st.deepEqual(emptyBrackets, { a: { 0: 'b' } }); + st.equal(Array.isArray(emptyBrackets.a), false, 'parseArrays:false, empty brackets case is not an array'); + + st.end(); + }); + + t.test('allows for query string prefix', function (st) { + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: false }), { '?foo': 'bar' }); + st.end(); + }); + + t.test('parses an object', function (st) { + var input = { + 'user[name]': { 'pop[bob]': 3 }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses string with comma as array divider', function (st) { + st.deepEqual(qs.parse('foo=bar,tee', { comma: true }), { foo: ['bar', 'tee'] }); + st.deepEqual(qs.parse('foo[bar]=coffee,tee', { comma: true }), { foo: { bar: ['coffee', 'tee'] } }); + st.deepEqual(qs.parse('foo=', { comma: true }), { foo: '' }); + st.deepEqual(qs.parse('foo', { comma: true }), { foo: '' }); + st.deepEqual(qs.parse('foo', { comma: true, strictNullHandling: true }), { foo: null }); + st.end(); + }); + + t.test('parses values with comma as array divider', function (st) { + st.deepEqual(qs.parse({ foo: 'bar,tee' }, { comma: false }), { foo: 'bar,tee' }); + st.deepEqual(qs.parse({ foo: 'bar,tee' }, { comma: true }), { foo: ['bar', 'tee'] }); + st.end(); + }); + + t.test('use number decoder, parses string that has one number with comma option enabled', function (st) { + var decoder = function (str, defaultDecoder, charset, type) { + if (!isNaN(Number(str))) { + return parseFloat(str); + } + return defaultDecoder(str, defaultDecoder, charset, type); + }; + + st.deepEqual(qs.parse('foo=1', { comma: true, decoder: decoder }), { foo: 1 }); + st.deepEqual(qs.parse('foo=0', { comma: true, decoder: decoder }), { foo: 0 }); + + st.end(); + }); + + t.test('parses brackets holds array of arrays when having two parts of strings with comma as array divider', function (st) { + st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=4,5,6', { comma: true }), { foo: [['1', '2', '3'], ['4', '5', '6']] }); + st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=', { comma: true }), { foo: [['1', '2', '3'], ''] }); + st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=,', { comma: true }), { foo: [['1', '2', '3'], ['', '']] }); + st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=a', { comma: true }), { foo: [['1', '2', '3'], 'a'] }); + + st.end(); + }); + + t.test('parses comma delimited array while having percent-encoded comma treated as normal text', function (st) { + st.deepEqual(qs.parse('foo=a%2Cb', { comma: true }), { foo: 'a,b' }); + st.deepEqual(qs.parse('foo=a%2C%20b,d', { comma: true }), { foo: ['a, b', 'd'] }); + st.deepEqual(qs.parse('foo=a%2C%20b,c%2C%20d', { comma: true }), { foo: ['a, b', 'c, d'] }); + + st.end(); + }); + + t.test('parses an object in dot notation', function (st) { + var input = { + 'user.name': { 'pop[bob]': 3 }, + 'user.email.': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input, { allowDots: true }); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses an object and not child values', function (st) { + var input = { + 'user[name]': { 'pop[bob]': { test: 3 } }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': { test: 3 } }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('does not blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.parse('a=b&c=d'); + global.Buffer = tempBuffer; + st.deepEqual(result, { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not crash when parsing circular references', function (st) { + var a = {}; + a.b = a; + + var parsed; + + st.doesNotThrow(function () { + parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + st.equal('bar' in parsed.foo, true); + st.equal('baz' in parsed.foo, true); + st.equal(parsed.foo.bar, 'baz'); + st.deepEqual(parsed.foo.baz, a); + st.end(); + }); + + t.test('does not crash when parsing deep objects', function (st) { + var parsed; + var str = 'foo'; + + for (var i = 0; i < 5000; i++) { + str += '[p]'; + } + + str += '=bar'; + + st.doesNotThrow(function () { + parsed = qs.parse(str, { depth: 5000 }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + + var depth = 0; + var ref = parsed.foo; + while ((ref = ref.p)) { + depth += 1; + } + + st.equal(depth, 5000, 'parsed is 5000 properties deep'); + + st.end(); + }); + + t.test('parses null objects correctly', { skip: !Object.create }, function (st) { + var a = Object.create(null); + a.b = 'c'; + + st.deepEqual(qs.parse(a), { b: 'c' }); + var result = qs.parse({ a: a }); + st.equal('a' in result, true, 'result has "a" property'); + st.deepEqual(result.a, a); + st.end(); + }); + + t.test('parses dates correctly', function (st) { + var now = new Date(); + st.deepEqual(qs.parse({ a: now }), { a: now }); + st.end(); + }); + + t.test('parses regular expressions correctly', function (st) { + var re = /^test$/; + st.deepEqual(qs.parse({ a: re }), { a: re }); + st.end(); + }); + + t.test('does not allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: false }), {}); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: false }), {}); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: false }), + {}, + 'bare "toString" results in {}' + ); + + st.end(); + }); + + t.test('can allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } }); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' }); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: true }), + { toString: '' }, + 'bare "toString" results in { toString: "" }' + ); + + st.end(); + }); + + t.test('params starting with a closing bracket', function (st) { + st.deepEqual(qs.parse(']=toString'), { ']': 'toString' }); + st.deepEqual(qs.parse(']]=toString'), { ']]': 'toString' }); + st.deepEqual(qs.parse(']hello]=toString'), { ']hello]': 'toString' }); + st.end(); + }); + + t.test('params starting with a starting bracket', function (st) { + st.deepEqual(qs.parse('[=toString'), { '[': 'toString' }); + st.deepEqual(qs.parse('[[=toString'), { '[[': 'toString' }); + st.deepEqual(qs.parse('[hello[=toString'), { '[hello[': 'toString' }); + st.end(); + }); + + t.test('add keys to objects', function (st) { + st.deepEqual( + qs.parse('a[b]=c&a=d'), + { a: { b: 'c', d: true } }, + 'can add keys to objects' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString'), + { a: { b: 'c' } }, + 'can not overwrite prototype' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { allowPrototypes: true }), + { a: { b: 'c', toString: true } }, + 'can overwrite prototype with allowPrototypes true' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { plainObjects: true }), + { __proto__: null, a: { __proto__: null, b: 'c', toString: true } }, + 'can overwrite prototype with plainObjects true' + ); + + st.end(); + }); + + t.test('can return null objects', { skip: !Object.create }, function (st) { + var expected = Object.create(null); + expected.a = Object.create(null); + expected.a.b = 'c'; + expected.a.hasOwnProperty = 'd'; + st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected); + st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null)); + var expectedArray = Object.create(null); + expectedArray.a = Object.create(null); + expectedArray.a[0] = 'b'; + expectedArray.a.c = 'd'; + st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray); + st.end(); + }); + + t.test('can parse with custom encoding', function (st) { + st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', { + decoder: function (str) { + var reg = /%([0-9A-F]{2})/ig; + var result = []; + var parts = reg.exec(str); + while (parts) { + result.push(parseInt(parts[1], 16)); + parts = reg.exec(str); + } + return String(iconv.decode(SaferBuffer.from(result), 'shift_jis')); + } + }), { 県: '大阪府' }); + st.end(); + }); + + t.test('receives the default decoder as a second argument', function (st) { + st.plan(1); + qs.parse('a', { + decoder: function (str, defaultDecoder) { + st.equal(defaultDecoder, utils.decode); + } + }); + st.end(); + }); + + t.test('throws error with wrong decoder', function (st) { + st['throws'](function () { + qs.parse({}, { decoder: 'string' }); + }, new TypeError('Decoder has to be a function.')); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.parse('a[b]=true', options); + st.deepEqual(options, {}); + st.end(); + }); + + t.test('throws if an invalid charset is specified', function (st) { + st['throws'](function () { + qs.parse('a=b', { charset: 'foobar' }); + }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined')); + st.end(); + }); + + t.test('parses an iso-8859-1 string if asked to', function (st) { + st.deepEqual(qs.parse('%A2=%BD', { charset: 'iso-8859-1' }), { '¢': '½' }); + st.end(); + }); + + var urlEncodedCheckmarkInUtf8 = '%E2%9C%93'; + var urlEncodedOSlashInUtf8 = '%C3%B8'; + var urlEncodedNumCheckmark = '%26%2310003%3B'; + var urlEncodedNumSmiley = '%26%239786%3B'; + + t.test('prefers an utf-8 charset specified by the utf8 sentinel to a default charset of iso-8859-1', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'iso-8859-1' }), { ø: 'ø' }); + st.end(); + }); + + t.test('prefers an iso-8859-1 charset specified by the utf8 sentinel to a default charset of utf-8', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { 'ø': 'ø' }); + st.end(); + }); + + t.test('does not require the utf8 sentinel to be defined before the parameters whose decoding it affects', function (st) { + st.deepEqual(qs.parse('a=' + urlEncodedOSlashInUtf8 + '&utf8=' + urlEncodedNumCheckmark, { charsetSentinel: true, charset: 'utf-8' }), { a: 'ø' }); + st.end(); + }); + + t.test('should ignore an utf8 sentinel with an unknown value', function (st) { + st.deepEqual(qs.parse('utf8=foo&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { ø: 'ø' }); + st.end(); + }); + + t.test('uses the utf8 sentinel to switch to utf-8 when no default charset is given', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { ø: 'ø' }); + st.end(); + }); + + t.test('uses the utf8 sentinel to switch to iso-8859-1 when no default charset is given', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { 'ø': 'ø' }); + st.end(); + }); + + t.test('interprets numeric entities in iso-8859-1 when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1', interpretNumericEntities: true }), { foo: '☺' }); + st.end(); + }); + + t.test('handles a custom decoder returning `null`, in the `iso-8859-1` charset, when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=&bar=' + urlEncodedNumSmiley, { + charset: 'iso-8859-1', + decoder: function (str, defaultDecoder, charset) { + return str ? defaultDecoder(str, defaultDecoder, charset) : null; + }, + interpretNumericEntities: true + }), { foo: null, bar: '☺' }); + st.end(); + }); + + t.test('does not interpret numeric entities in iso-8859-1 when `interpretNumericEntities` is absent', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1' }), { foo: '☺' }); + st.end(); + }); + + t.test('does not interpret numeric entities when the charset is utf-8, even when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'utf-8', interpretNumericEntities: true }), { foo: '☺' }); + st.end(); + }); + + t.test('does not interpret %uXXXX syntax in iso-8859-1 mode', function (st) { + st.deepEqual(qs.parse('%u263A=%u263A', { charset: 'iso-8859-1' }), { '%u263A': '%u263A' }); + st.end(); + }); + + t.test('allows for decoding keys and values differently', function (st) { + var decoder = function (str, defaultDecoder, charset, type) { + if (type === 'key') { + return defaultDecoder(str, defaultDecoder, charset, type).toLowerCase(); + } + if (type === 'value') { + return defaultDecoder(str, defaultDecoder, charset, type).toUpperCase(); + } + throw 'this should never happen! type: ' + type; + }; + + st.deepEqual(qs.parse('KeY=vAlUe', { decoder: decoder }), { key: 'VALUE' }); + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/typed-rest-client/node_modules/qs/test/stringify.js b/node_modules/typed-rest-client/node_modules/qs/test/stringify.js new file mode 100644 index 0000000..4969218 --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/test/stringify.js @@ -0,0 +1,750 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var utils = require('../lib/utils'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; +var hasSymbols = require('has-symbols'); +var hasBigInt = typeof BigInt === 'function'; + +test('stringify()', function (t) { + t.test('stringifies a querystring object', function (st) { + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: 1 }), 'a=1'); + st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2'); + st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z'); + st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC'); + st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80'); + st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90'); + st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7'); + st.end(); + }); + + t.test('stringifies falsy values', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(null, { strictNullHandling: true }), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(0), ''); + st.end(); + }); + + t.test('stringifies symbols', { skip: !hasSymbols() }, function (st) { + st.equal(qs.stringify(Symbol.iterator), ''); + st.equal(qs.stringify([Symbol.iterator]), '0=Symbol%28Symbol.iterator%29'); + st.equal(qs.stringify({ a: Symbol.iterator }), 'a=Symbol%28Symbol.iterator%29'); + st.equal( + qs.stringify({ a: [Symbol.iterator] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), + 'a[]=Symbol%28Symbol.iterator%29' + ); + st.end(); + }); + + t.test('stringifies bigints', { skip: !hasBigInt }, function (st) { + var three = BigInt(3); + var encodeWithN = function (value, defaultEncoder, charset) { + var result = defaultEncoder(value, defaultEncoder, charset); + return typeof value === 'bigint' ? result + 'n' : result; + }; + st.equal(qs.stringify(three), ''); + st.equal(qs.stringify([three]), '0=3'); + st.equal(qs.stringify([three], { encoder: encodeWithN }), '0=3n'); + st.equal(qs.stringify({ a: three }), 'a=3'); + st.equal(qs.stringify({ a: three }, { encoder: encodeWithN }), 'a=3n'); + st.equal( + qs.stringify({ a: [three] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), + 'a[]=3' + ); + st.equal( + qs.stringify({ a: [three] }, { encodeValuesOnly: true, encoder: encodeWithN, arrayFormat: 'brackets' }), + 'a[]=3n' + ); + st.end(); + }); + + t.test('adds query prefix', function (st) { + st.equal(qs.stringify({ a: 'b' }, { addQueryPrefix: true }), '?a=b'); + st.end(); + }); + + t.test('with query prefix, outputs blank string given an empty object', function (st) { + st.equal(qs.stringify({}, { addQueryPrefix: true }), ''); + st.end(); + }); + + t.test('stringifies nested falsy values', function (st) { + st.equal(qs.stringify({ a: { b: { c: null } } }), 'a%5Bb%5D%5Bc%5D='); + st.equal(qs.stringify({ a: { b: { c: null } } }, { strictNullHandling: true }), 'a%5Bb%5D%5Bc%5D'); + st.equal(qs.stringify({ a: { b: { c: false } } }), 'a%5Bb%5D%5Bc%5D=false'); + st.end(); + }); + + t.test('stringifies a nested object', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies a nested object with dots notation', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e'); + st.end(); + }); + + t.test('stringifies an array value', function (st) { + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'indices' }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'brackets' }), + 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'comma' }), + 'a=b%2Cc%2Cd', + 'comma => comma' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'default => indices' + ); + st.end(); + }); + + t.test('omits nulls when asked', function (st) { + st.equal(qs.stringify({ a: 'b', c: null }, { skipNulls: true }), 'a=b'); + st.end(); + }); + + t.test('omits nested nulls when asked', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('omits array indices when asked', function (st) { + st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d'); + st.end(); + }); + + t.test('stringifies a nested array value', function (st) { + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'indices' }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'brackets' }), 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'comma' }), 'a%5Bb%5D=c%2Cd'); // a[b]=c,d + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.end(); + }); + + t.test('stringifies a nested array value with dots notation', function (st) { + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a.b[0]=c&a.b[1]=d', + 'indices: stringifies with dots + indices' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a.b[]=c&a.b[]=d', + 'brackets: stringifies with dots + brackets' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'comma' } + ), + 'a.b=c,d', + 'comma: stringifies with dots + comma' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false } + ), + 'a.b[0]=c&a.b[1]=d', + 'default: stringifies with dots + indices' + ); + st.end(); + }); + + t.test('stringifies an object inside an array', function (st) { + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D=c', // a[0][b]=c + 'indices => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D=c', // a[][b]=c + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }), + 'a%5B0%5D%5Bb%5D=c', + 'default => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'indices => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D%5Bc%5D%5B%5D=1', + 'brackets => brackets' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an array with mixed objects and primitives', function (st) { + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'indices' }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'brackets' }), + 'a[][b]=1&a[]=2&a[]=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an object inside an array with dots notation', function (st) { + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b=c', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b=c', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false } + ), + 'a[0].b=c', + 'default => indices' + ); + + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b.c[0]=1', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b.c[]=1', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false } + ), + 'a[0].b.c[0]=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('does not omit object keys when indices = false', function (st) { + st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when indices=true', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat=indices', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses repeat notation for arrays when no arrayFormat=repeat', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c'); + st.end(); + }); + + t.test('uses brackets notation for arrays when no arrayFormat=brackets', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c'); + st.end(); + }); + + t.test('stringifies a complicated object', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies an empty value', function (st) { + st.equal(qs.stringify({ a: '' }), 'a='); + st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a'); + + st.equal(qs.stringify({ a: '', b: '' }), 'a=&b='); + st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b='); + + st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D='); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D'); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D='); + + st.end(); + }); + + t.test('stringifies a null object', { skip: !Object.create }, function (st) { + var obj = Object.create(null); + obj.a = 'b'; + st.equal(qs.stringify(obj), 'a=b'); + st.end(); + }); + + t.test('returns an empty string for invalid input', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(''), ''); + st.end(); + }); + + t.test('stringifies an object with a null object as a child', { skip: !Object.create }, function (st) { + var obj = { a: Object.create(null) }; + + obj.a.b = 'c'; + st.equal(qs.stringify(obj), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('drops keys with a value of undefined', function (st) { + st.equal(qs.stringify({ a: undefined }), ''); + + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D'); + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D='); + st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D='); + st.end(); + }); + + t.test('url encodes values', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.end(); + }); + + t.test('stringifies a date', function (st) { + var now = new Date(); + var str = 'a=' + encodeURIComponent(now.toISOString()); + st.equal(qs.stringify({ a: now }), str); + st.end(); + }); + + t.test('stringifies the weird object from qs', function (st) { + st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F'); + st.end(); + }); + + t.test('skips properties that are part of the object prototype', function (st) { + Object.prototype.crash = 'test'; + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + delete Object.prototype.crash; + st.end(); + }); + + t.test('stringifies boolean values', function (st) { + st.equal(qs.stringify({ a: true }), 'a=true'); + st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true'); + st.equal(qs.stringify({ b: false }), 'b=false'); + st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false'); + st.end(); + }); + + t.test('stringifies buffer values', function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test'); + st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test'); + st.end(); + }); + + t.test('stringifies an object using an alternative delimiter', function (st) { + st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); + st.end(); + }); + + t.test('doesn\'t blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.stringify({ a: 'b', c: 'd' }); + global.Buffer = tempBuffer; + st.equal(result, 'a=b&c=d'); + st.end(); + }); + + t.test('selects properties when filter=array', function (st) { + st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b'); + st.equal(qs.stringify({ a: 1 }, { filter: [] }), ''); + + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'indices' } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'brackets' } + ), + 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2] } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('supports custom representations when filter=function', function (st) { + var calls = 0; + var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } }; + var filterFunc = function (prefix, value) { + calls += 1; + if (calls === 1) { + st.equal(prefix, '', 'prefix is empty'); + st.equal(value, obj); + } else if (prefix === 'c') { + return void 0; + } else if (value instanceof Date) { + st.equal(prefix, 'e[f]'); + return value.getTime(); + } + return value; + }; + + st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000'); + st.equal(calls, 5); + st.end(); + }); + + t.test('can disable uri encoding', function (st) { + st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c'); + st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c'); + st.end(); + }); + + t.test('can sort the keys', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y'); + st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a'); + st.end(); + }); + + t.test('can sort the keys at depth 3 or more too', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: sort, encode: false } + ), + 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb' + ); + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: null, encode: false } + ), + 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b' + ); + st.end(); + }); + + t.test('can stringify with custom encoding', function (st) { + st.equal(qs.stringify({ 県: '大阪府', '': '' }, { + encoder: function (str) { + if (str.length === 0) { + return ''; + } + var buf = iconv.encode(str, 'shiftjis'); + var result = []; + for (var i = 0; i < buf.length; ++i) { + result.push(buf.readUInt8(i).toString(16)); + } + return '%' + result.join('%'); + } + }), '%8c%a7=%91%e5%8d%e3%95%7b&='); + st.end(); + }); + + t.test('receives the default encoder as a second argument', function (st) { + st.plan(2); + qs.stringify({ a: 1 }, { + encoder: function (str, defaultEncoder) { + st.equal(defaultEncoder, utils.encode); + } + }); + st.end(); + }); + + t.test('throws error with wrong encoder', function (st) { + st['throws'](function () { + qs.stringify({}, { encoder: 'string' }); + }, new TypeError('Encoder has to be a function.')); + st.end(); + }); + + t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, { + encoder: function (buffer) { + if (typeof buffer === 'string') { + return buffer; + } + return String.fromCharCode(buffer.readUInt8(0) + 97); + } + }), 'a=b'); + + st.equal(qs.stringify({ a: SaferBuffer.from('a b') }, { + encoder: function (buffer) { + return buffer; + } + }), 'a=a b'); + st.end(); + }); + + t.test('serializeDate option', function (st) { + var date = new Date(); + st.equal( + qs.stringify({ a: date }), + 'a=' + date.toISOString().replace(/:/g, '%3A'), + 'default is toISOString' + ); + + var mutatedDate = new Date(); + mutatedDate.toISOString = function () { + throw new SyntaxError(); + }; + st['throws'](function () { + mutatedDate.toISOString(); + }, SyntaxError); + st.equal( + qs.stringify({ a: mutatedDate }), + 'a=' + Date.prototype.toISOString.call(mutatedDate).replace(/:/g, '%3A'), + 'toISOString works even when method is not locally present' + ); + + var specificDate = new Date(6); + st.equal( + qs.stringify( + { a: specificDate }, + { serializeDate: function (d) { return d.getTime() * 7; } } + ), + 'a=42', + 'custom serializeDate function called' + ); + + st.equal( + qs.stringify( + { a: [date] }, + { + serializeDate: function (d) { return d.getTime(); }, + arrayFormat: 'comma' + } + ), + 'a=' + date.getTime(), + 'works with arrayFormat comma' + ); + + st.end(); + }); + + t.test('RFC 1738 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC1738 }), 'a=b+c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC1738 }), 'a+b=c+d'); + st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.RFC1738 }), 'a+b=a+b'); + st.end(); + }); + + t.test('RFC 3986 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC3986 }), 'a=b%20c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC3986 }), 'a%20b=c%20d'); + st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.RFC3986 }), 'a%20b=a%20b'); + st.end(); + }); + + t.test('Backward compatibility to RFC 3986', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }), 'a%20b=a%20b'); + st.end(); + }); + + t.test('Edge cases and unknown formats', function (st) { + ['UFO1234', false, 1234, null, {}, []].forEach( + function (format) { + st['throws']( + function () { + qs.stringify({ a: 'b c' }, { format: format }); + }, + new TypeError('Unknown format option provided.') + ); + } + ); + st.end(); + }); + + t.test('encodeValuesOnly', function (st) { + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } + ), + 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h' + ); + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] } + ), + 'a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h' + ); + st.end(); + }); + + t.test('encodeValuesOnly - strictNullHandling', function (st) { + st.equal( + qs.stringify( + { a: { b: null } }, + { encodeValuesOnly: true, strictNullHandling: true } + ), + 'a[b]' + ); + st.end(); + }); + + t.test('throws if an invalid charset is specified', function (st) { + st['throws'](function () { + qs.stringify({ a: 'b' }, { charset: 'foobar' }); + }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined')); + st.end(); + }); + + t.test('respects a charset of iso-8859-1', function (st) { + st.equal(qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }), '%E6=%E6'); + st.end(); + }); + + t.test('encodes unrepresentable chars as numeric entities in iso-8859-1 mode', function (st) { + st.equal(qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }), 'a=%26%239786%3B'); + st.end(); + }); + + t.test('respects an explicit charset of utf-8 (the default)', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charset: 'utf-8' }), 'a=%C3%A6'); + st.end(); + }); + + t.test('adds the right sentinel when instructed to and the charset is utf-8', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'utf-8' }), 'utf8=%E2%9C%93&a=%C3%A6'); + st.end(); + }); + + t.test('adds the right sentinel when instructed to and the charset is iso-8859-1', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }), 'utf8=%26%2310003%3B&a=%E6'); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.stringify({}, options); + st.deepEqual(options, {}); + st.end(); + }); + + t.test('strictNullHandling works with custom filter', function (st) { + var filter = function (prefix, value) { + return value; + }; + + var options = { strictNullHandling: true, filter: filter }; + st.equal(qs.stringify({ key: null }, options), 'key'); + st.end(); + }); + + t.test('strictNullHandling works with null serializeDate', function (st) { + var serializeDate = function () { + return null; + }; + var options = { strictNullHandling: true, serializeDate: serializeDate }; + var date = new Date(); + st.equal(qs.stringify({ key: date }, options), 'key'); + st.end(); + }); + + t.test('allows for encoding keys and values differently', function (st) { + var encoder = function (str, defaultEncoder, charset, type) { + if (type === 'key') { + return defaultEncoder(str, defaultEncoder, charset, type).toLowerCase(); + } + if (type === 'value') { + return defaultEncoder(str, defaultEncoder, charset, type).toUpperCase(); + } + throw 'this should never happen! type: ' + type; + }; + + st.deepEqual(qs.stringify({ KeY: 'vAlUe' }, { encoder: encoder }), 'key=VALUE'); + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/typed-rest-client/node_modules/qs/test/utils.js b/node_modules/typed-rest-client/node_modules/qs/test/utils.js new file mode 100644 index 0000000..aa84dfd --- /dev/null +++ b/node_modules/typed-rest-client/node_modules/qs/test/utils.js @@ -0,0 +1,136 @@ +'use strict'; + +var test = require('tape'); +var inspect = require('object-inspect'); +var SaferBuffer = require('safer-buffer').Buffer; +var forEach = require('for-each'); +var utils = require('../lib/utils'); + +test('merge()', function (t) { + t.deepEqual(utils.merge(null, true), [null, true], 'merges true into null'); + + t.deepEqual(utils.merge(null, [42]), [null, 42], 'merges null into an array'); + + t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key'); + + var oneMerged = utils.merge({ foo: 'bar' }, { foo: { first: '123' } }); + t.deepEqual(oneMerged, { foo: ['bar', { first: '123' }] }, 'merges a standalone and an object into an array'); + + var twoMerged = utils.merge({ foo: ['bar', { first: '123' }] }, { foo: { second: '456' } }); + t.deepEqual(twoMerged, { foo: { 0: 'bar', 1: { first: '123' }, second: '456' } }, 'merges a standalone and two objects into an array'); + + var sandwiched = utils.merge({ foo: ['bar', { first: '123', second: '456' }] }, { foo: 'baz' }); + t.deepEqual(sandwiched, { foo: ['bar', { first: '123', second: '456' }, 'baz'] }, 'merges an object sandwiched by two standalones into an array'); + + var nestedArrays = utils.merge({ foo: ['baz'] }, { foo: ['bar', 'xyzzy'] }); + t.deepEqual(nestedArrays, { foo: ['baz', 'bar', 'xyzzy'] }); + + var noOptionsNonObjectSource = utils.merge({ foo: 'baz' }, 'bar'); + t.deepEqual(noOptionsNonObjectSource, { foo: 'baz', bar: true }); + + t.test( + 'avoids invoking array setters unnecessarily', + { skip: typeof Object.defineProperty !== 'function' }, + function (st) { + var setCount = 0; + var getCount = 0; + var observed = []; + Object.defineProperty(observed, 0, { + get: function () { + getCount += 1; + return { bar: 'baz' }; + }, + set: function () { setCount += 1; } + }); + utils.merge(observed, [null]); + st.equal(setCount, 0); + st.equal(getCount, 1); + observed[0] = observed[0]; // eslint-disable-line no-self-assign + st.equal(setCount, 1); + st.equal(getCount, 2); + st.end(); + } + ); + + t.end(); +}); + +test('assign()', function (t) { + var target = { a: 1, b: 2 }; + var source = { b: 3, c: 4 }; + var result = utils.assign(target, source); + + t.equal(result, target, 'returns the target'); + t.deepEqual(target, { a: 1, b: 3, c: 4 }, 'target and source are merged'); + t.deepEqual(source, { b: 3, c: 4 }, 'source is untouched'); + + t.end(); +}); + +test('combine()', function (t) { + t.test('both arrays', function (st) { + var a = [1]; + var b = [2]; + var combined = utils.combine(a, b); + + st.deepEqual(a, [1], 'a is not mutated'); + st.deepEqual(b, [2], 'b is not mutated'); + st.notEqual(a, combined, 'a !== combined'); + st.notEqual(b, combined, 'b !== combined'); + st.deepEqual(combined, [1, 2], 'combined is a + b'); + + st.end(); + }); + + t.test('one array, one non-array', function (st) { + var aN = 1; + var a = [aN]; + var bN = 2; + var b = [bN]; + + var combinedAnB = utils.combine(aN, b); + st.deepEqual(b, [bN], 'b is not mutated'); + st.notEqual(aN, combinedAnB, 'aN + b !== aN'); + st.notEqual(a, combinedAnB, 'aN + b !== a'); + st.notEqual(bN, combinedAnB, 'aN + b !== bN'); + st.notEqual(b, combinedAnB, 'aN + b !== b'); + st.deepEqual([1, 2], combinedAnB, 'first argument is array-wrapped when not an array'); + + var combinedABn = utils.combine(a, bN); + st.deepEqual(a, [aN], 'a is not mutated'); + st.notEqual(aN, combinedABn, 'a + bN !== aN'); + st.notEqual(a, combinedABn, 'a + bN !== a'); + st.notEqual(bN, combinedABn, 'a + bN !== bN'); + st.notEqual(b, combinedABn, 'a + bN !== b'); + st.deepEqual([1, 2], combinedABn, 'second argument is array-wrapped when not an array'); + + st.end(); + }); + + t.test('neither is an array', function (st) { + var combined = utils.combine(1, 2); + st.notEqual(1, combined, '1 + 2 !== 1'); + st.notEqual(2, combined, '1 + 2 !== 2'); + st.deepEqual([1, 2], combined, 'both arguments are array-wrapped when not an array'); + + st.end(); + }); + + t.end(); +}); + +test('isBuffer()', function (t) { + forEach([null, undefined, true, false, '', 'abc', 42, 0, NaN, {}, [], function () {}, /a/g], function (x) { + t.equal(utils.isBuffer(x), false, inspect(x) + ' is not a buffer'); + }); + + var fakeBuffer = { constructor: Buffer }; + t.equal(utils.isBuffer(fakeBuffer), false, 'fake buffer is not a buffer'); + + var saferBuffer = SaferBuffer.from('abc'); + t.equal(utils.isBuffer(saferBuffer), true, 'SaferBuffer instance is a buffer'); + + var buffer = Buffer.from && Buffer.alloc ? Buffer.from('abc') : new Buffer('abc'); + t.equal(utils.isBuffer(buffer), true, 'real Buffer instance is a buffer'); + t.end(); +}); diff --git a/node_modules/typed-rest-client/opensource/Node-SMB/README.md b/node_modules/typed-rest-client/opensource/Node-SMB/README.md new file mode 100644 index 0000000..c713c11 --- /dev/null +++ b/node_modules/typed-rest-client/opensource/Node-SMB/README.md @@ -0,0 +1,5 @@ +### Reference: +The modules (common.js, ntlm.js and smbhash.js) were copied from a file of the same name at https://github.com/Node-SMB/ntlm. + +The modules has been used for the purpose of encoding and decoding the headers used during NTLM HTTP Authentication and as of this writing, it is a part of the typed-rest-client module produced by Microsoft. + diff --git a/node_modules/typed-rest-client/opensource/Node-SMB/lib/common.js b/node_modules/typed-rest-client/opensource/Node-SMB/lib/common.js new file mode 100644 index 0000000..9c77fea --- /dev/null +++ b/node_modules/typed-rest-client/opensource/Node-SMB/lib/common.js @@ -0,0 +1,61 @@ +var crypto = require('crypto'); + +function zeroextend(str, len) +{ + while (str.length < len) + str = '0' + str; + return (str); +} + +/* + * Fix (odd) parity bits in a 64-bit DES key. + */ +function oddpar(buf) +{ + for (var j = 0; j < buf.length; j++) { + var par = 1; + for (var i = 1; i < 8; i++) { + par = (par + ((buf[j] >> i) & 1)) % 2; + } + buf[j] |= par & 1; + } + return buf; +} + +/* + * Expand a 56-bit key buffer to the full 64-bits for DES. + * + * Based on code sample in: + * http://www.innovation.ch/personal/ronald/ntlm.html + */ +function expandkey(key56) +{ + var key64 = new Buffer(8); + + key64[0] = key56[0] & 0xFE; + key64[1] = ((key56[0] << 7) & 0xFF) | (key56[1] >> 1); + key64[2] = ((key56[1] << 6) & 0xFF) | (key56[2] >> 2); + key64[3] = ((key56[2] << 5) & 0xFF) | (key56[3] >> 3); + key64[4] = ((key56[3] << 4) & 0xFF) | (key56[4] >> 4); + key64[5] = ((key56[4] << 3) & 0xFF) | (key56[5] >> 5); + key64[6] = ((key56[5] << 2) & 0xFF) | (key56[6] >> 6); + key64[7] = (key56[6] << 1) & 0xFF; + + return key64; +} + +/* + * Convert a binary string to a hex string + */ +function bintohex(bin) +{ + var buf = (Buffer.isBuffer(buf) ? buf : new Buffer(bin, 'binary')); + var str = buf.toString('hex').toUpperCase(); + return zeroextend(str, 32); +} + + +module.exports.zeroextend = zeroextend; +module.exports.oddpar = oddpar; +module.exports.expandkey = expandkey; +module.exports.bintohex = bintohex; diff --git a/node_modules/typed-rest-client/opensource/Node-SMB/lib/ntlm.js b/node_modules/typed-rest-client/opensource/Node-SMB/lib/ntlm.js new file mode 100644 index 0000000..3723bdd --- /dev/null +++ b/node_modules/typed-rest-client/opensource/Node-SMB/lib/ntlm.js @@ -0,0 +1,220 @@ +var log = console.log; +var crypto = require('crypto'); +var $ = require('./common'); +var lmhashbuf = require('./smbhash').lmhashbuf; +var nthashbuf = require('./smbhash').nthashbuf; + + +function encodeType1(hostname, ntdomain) { + hostname = hostname.toUpperCase(); + ntdomain = ntdomain.toUpperCase(); + var hostnamelen = Buffer.byteLength(hostname, 'ascii'); + var ntdomainlen = Buffer.byteLength(ntdomain, 'ascii'); + + var pos = 0; + var buf = new Buffer(32 + hostnamelen + ntdomainlen); + + buf.write('NTLMSSP', pos, 7, 'ascii'); // byte protocol[8]; + pos += 7; + buf.writeUInt8(0, pos); + pos++; + + buf.writeUInt8(0x01, pos); // byte type; + pos++; + + buf.fill(0x00, pos, pos + 3); // byte zero[3]; + pos += 3; + + buf.writeUInt16LE(0xb203, pos); // short flags; + pos += 2; + + buf.fill(0x00, pos, pos + 2); // byte zero[2]; + pos += 2; + + buf.writeUInt16LE(ntdomainlen, pos); // short dom_len; + pos += 2; + buf.writeUInt16LE(ntdomainlen, pos); // short dom_len; + pos += 2; + + var ntdomainoff = 0x20 + hostnamelen; + buf.writeUInt16LE(ntdomainoff, pos); // short dom_off; + pos += 2; + + buf.fill(0x00, pos, pos + 2); // byte zero[2]; + pos += 2; + + buf.writeUInt16LE(hostnamelen, pos); // short host_len; + pos += 2; + buf.writeUInt16LE(hostnamelen, pos); // short host_len; + pos += 2; + + buf.writeUInt16LE(0x20, pos); // short host_off; + pos += 2; + + buf.fill(0x00, pos, pos + 2); // byte zero[2]; + pos += 2; + + buf.write(hostname, 0x20, hostnamelen, 'ascii'); + buf.write(ntdomain, ntdomainoff, ntdomainlen, 'ascii'); + + return buf; +} + + +/* + * + */ +function decodeType2(buf) +{ + var proto = buf.toString('ascii', 0, 7); + if (buf[7] !== 0x00 || proto !== 'NTLMSSP') + throw new Error('magic was not NTLMSSP'); + + var type = buf.readUInt8(8); + if (type !== 0x02) + throw new Error('message was not NTLMSSP type 0x02'); + + //var msg_len = buf.readUInt16LE(16); + + //var flags = buf.readUInt16LE(20); + + var nonce = buf.slice(24, 32); + return nonce; +} + +function encodeType3(username, hostname, ntdomain, nonce, password) { + hostname = hostname.toUpperCase(); + ntdomain = ntdomain.toUpperCase(); + + var lmh = new Buffer(21); + lmhashbuf(password).copy(lmh); + lmh.fill(0x00, 16); // null pad to 21 bytes + var nth = new Buffer(21); + nthashbuf(password).copy(nth); + nth.fill(0x00, 16); // null pad to 21 bytes + + var lmr = makeResponse(lmh, nonce); + var ntr = makeResponse(nth, nonce); + + var usernamelen = Buffer.byteLength(username, 'ucs2'); + var hostnamelen = Buffer.byteLength(hostname, 'ucs2'); + var ntdomainlen = Buffer.byteLength(ntdomain, 'ucs2'); + var lmrlen = 0x18; + var ntrlen = 0x18; + + var ntdomainoff = 0x40; + var usernameoff = ntdomainoff + ntdomainlen; + var hostnameoff = usernameoff + usernamelen; + var lmroff = hostnameoff + hostnamelen; + var ntroff = lmroff + lmrlen; + + var pos = 0; + var msg_len = 64 + ntdomainlen + usernamelen + hostnamelen + lmrlen + ntrlen; + var buf = new Buffer(msg_len); + + buf.write('NTLMSSP', pos, 7, 'ascii'); // byte protocol[8]; + pos += 7; + buf.writeUInt8(0, pos); + pos++; + + buf.writeUInt8(0x03, pos); // byte type; + pos++; + + buf.fill(0x00, pos, pos + 3); // byte zero[3]; + pos += 3; + + buf.writeUInt16LE(lmrlen, pos); // short lm_resp_len; + pos += 2; + buf.writeUInt16LE(lmrlen, pos); // short lm_resp_len; + pos += 2; + buf.writeUInt16LE(lmroff, pos); // short lm_resp_off; + pos += 2; + buf.fill(0x00, pos, pos + 2); // byte zero[2]; + pos += 2; + + buf.writeUInt16LE(ntrlen, pos); // short nt_resp_len; + pos += 2; + buf.writeUInt16LE(ntrlen, pos); // short nt_resp_len; + pos += 2; + buf.writeUInt16LE(ntroff, pos); // short nt_resp_off; + pos += 2; + buf.fill(0x00, pos, pos + 2); // byte zero[2]; + pos += 2; + + buf.writeUInt16LE(ntdomainlen, pos); // short dom_len; + pos += 2; + buf.writeUInt16LE(ntdomainlen, pos); // short dom_len; + pos += 2; + buf.writeUInt16LE(ntdomainoff, pos); // short dom_off; + pos += 2; + buf.fill(0x00, pos, pos + 2); // byte zero[2]; + pos += 2; + + buf.writeUInt16LE(usernamelen, pos); // short user_len; + pos += 2; + buf.writeUInt16LE(usernamelen, pos); // short user_len; + pos += 2; + buf.writeUInt16LE(usernameoff, pos); // short user_off; + pos += 2; + buf.fill(0x00, pos, pos + 2); // byte zero[2]; + pos += 2; + + buf.writeUInt16LE(hostnamelen, pos); // short host_len; + pos += 2; + buf.writeUInt16LE(hostnamelen, pos); // short host_len; + pos += 2; + buf.writeUInt16LE(hostnameoff, pos); // short host_off; + pos += 2; + buf.fill(0x00, pos, pos + 6); // byte zero[6]; + pos += 6; + + buf.writeUInt16LE(msg_len, pos); // short msg_len; + pos += 2; + buf.fill(0x00, pos, pos + 2); // byte zero[2]; + pos += 2; + + buf.writeUInt16LE(0x8201, pos); // short flags; + pos += 2; + buf.fill(0x00, pos, pos + 2); // byte zero[2]; + pos += 2; + + buf.write(ntdomain, ntdomainoff, ntdomainlen, 'ucs2'); + buf.write(username, usernameoff, usernamelen, 'ucs2'); + buf.write(hostname, hostnameoff, hostnamelen, 'ucs2'); + lmr.copy(buf, lmroff, 0, lmrlen); + ntr.copy(buf, ntroff, 0, ntrlen); + + return buf; +} + +function makeResponse(hash, nonce) +{ + var out = new Buffer(24); + for (var i = 0; i < 3; i++) { + var keybuf = $.oddpar($.expandkey(hash.slice(i * 7, i * 7 + 7))); + var des = crypto.createCipheriv('DES-ECB', keybuf, ''); + var str = des.update(nonce.toString('binary'), 'binary', 'binary'); + out.write(str, i * 8, i * 8 + 8, 'binary'); + } + return out; +} + +exports.encodeType1 = encodeType1; +exports.decodeType2 = decodeType2; +exports.encodeType3 = encodeType3; + +// Convenience methods. + +exports.challengeHeader = function (hostname, domain) { + return 'NTLM ' + exports.encodeType1(hostname, domain).toString('base64'); +}; + +exports.responseHeader = function (res, url, domain, username, password) { + var serverNonce = new Buffer((res.headers['www-authenticate'].match(/^NTLM\s+(.+?)(,|\s+|$)/) || [])[1], 'base64'); + var hostname = require('url').parse(url).hostname; + return 'NTLM ' + exports.encodeType3(username, hostname, domain, exports.decodeType2(serverNonce), password).toString('base64') +}; + +// Import smbhash module. + +exports.smbhash = require('./smbhash'); diff --git a/node_modules/typed-rest-client/opensource/Node-SMB/lib/smbhash.js b/node_modules/typed-rest-client/opensource/Node-SMB/lib/smbhash.js new file mode 100644 index 0000000..d597639 --- /dev/null +++ b/node_modules/typed-rest-client/opensource/Node-SMB/lib/smbhash.js @@ -0,0 +1,64 @@ +var crypto = require('crypto'); +var $ = require('./common'); + +/* + * Generate the LM Hash + */ +function lmhashbuf(inputstr) +{ + /* ASCII --> uppercase */ + var x = inputstr.substring(0, 14).toUpperCase(); + var xl = Buffer.byteLength(x, 'ascii'); + + /* null pad to 14 bytes */ + var y = new Buffer(14); + y.write(x, 0, xl, 'ascii'); + y.fill(0, xl); + + /* insert odd parity bits in key */ + var halves = [ + $.oddpar($.expandkey(y.slice(0, 7))), + $.oddpar($.expandkey(y.slice(7, 14))) + ]; + + /* DES encrypt magic number "KGS!@#$%" to two + * 8-byte ciphertexts, (ECB, no padding) + */ + var buf = new Buffer(16); + var pos = 0; + var cts = halves.forEach(function(z) { + var des = crypto.createCipheriv('DES-ECB', z, ''); + var str = des.update('KGS!@#$%', 'binary', 'binary'); + buf.write(str, pos, pos + 8, 'binary'); + pos += 8; + }); + + /* concat the two ciphertexts to form 16byte value, + * the LM hash */ + return buf; +} + +function nthashbuf(str) +{ + /* take MD4 hash of UCS-2 encoded password */ + var ucs2 = new Buffer(str, 'ucs2'); + var md4 = crypto.createHash('md4'); + md4.update(ucs2); + return new Buffer(md4.digest('binary'), 'binary'); +} + +function lmhash(is) +{ + return $.bintohex(lmhashbuf(is)); +} + +function nthash(is) +{ + return $.bintohex(nthashbuf(is)); +} + +module.exports.nthashbuf = nthashbuf; +module.exports.lmhashbuf = lmhashbuf; + +module.exports.nthash = nthash; +module.exports.lmhash = lmhash; diff --git a/node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js b/node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js deleted file mode 100644 index adf7602..0000000 --- a/node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js +++ /dev/null @@ -1,389 +0,0 @@ -var crypto = require('crypto'); - -var flags = { - NTLM_NegotiateUnicode : 0x00000001, - NTLM_NegotiateOEM : 0x00000002, - NTLM_RequestTarget : 0x00000004, - NTLM_Unknown9 : 0x00000008, - NTLM_NegotiateSign : 0x00000010, - NTLM_NegotiateSeal : 0x00000020, - NTLM_NegotiateDatagram : 0x00000040, - NTLM_NegotiateLanManagerKey : 0x00000080, - NTLM_Unknown8 : 0x00000100, - NTLM_NegotiateNTLM : 0x00000200, - NTLM_NegotiateNTOnly : 0x00000400, - NTLM_Anonymous : 0x00000800, - NTLM_NegotiateOemDomainSupplied : 0x00001000, - NTLM_NegotiateOemWorkstationSupplied : 0x00002000, - NTLM_Unknown6 : 0x00004000, - NTLM_NegotiateAlwaysSign : 0x00008000, - NTLM_TargetTypeDomain : 0x00010000, - NTLM_TargetTypeServer : 0x00020000, - NTLM_TargetTypeShare : 0x00040000, - NTLM_NegotiateExtendedSecurity : 0x00080000, - NTLM_NegotiateIdentify : 0x00100000, - NTLM_Unknown5 : 0x00200000, - NTLM_RequestNonNTSessionKey : 0x00400000, - NTLM_NegotiateTargetInfo : 0x00800000, - NTLM_Unknown4 : 0x01000000, - NTLM_NegotiateVersion : 0x02000000, - NTLM_Unknown3 : 0x04000000, - NTLM_Unknown2 : 0x08000000, - NTLM_Unknown1 : 0x10000000, - NTLM_Negotiate128 : 0x20000000, - NTLM_NegotiateKeyExchange : 0x40000000, - NTLM_Negotiate56 : 0x80000000 -}; -var typeflags = { - NTLM_TYPE1_FLAGS : flags.NTLM_NegotiateUnicode - + flags.NTLM_NegotiateOEM - + flags.NTLM_RequestTarget - + flags.NTLM_NegotiateNTLM - + flags.NTLM_NegotiateOemDomainSupplied - + flags.NTLM_NegotiateOemWorkstationSupplied - + flags.NTLM_NegotiateAlwaysSign - + flags.NTLM_NegotiateExtendedSecurity - + flags.NTLM_NegotiateVersion - + flags.NTLM_Negotiate128 - + flags.NTLM_Negotiate56, - - NTLM_TYPE2_FLAGS : flags.NTLM_NegotiateUnicode - + flags.NTLM_RequestTarget - + flags.NTLM_NegotiateNTLM - + flags.NTLM_NegotiateAlwaysSign - + flags.NTLM_NegotiateExtendedSecurity - + flags.NTLM_NegotiateTargetInfo - + flags.NTLM_NegotiateVersion - + flags.NTLM_Negotiate128 - + flags.NTLM_Negotiate56 -}; - -function createType1Message(options){ - var domain = escape(options.domain.toUpperCase()); - var workstation = escape(options.workstation.toUpperCase()); - var protocol = 'NTLMSSP\0'; - - var BODY_LENGTH = 40; - - var type1flags = typeflags.NTLM_TYPE1_FLAGS; - if(!domain || domain === '') - type1flags = type1flags - flags.NTLM_NegotiateOemDomainSupplied; - - var pos = 0; - var buf = new Buffer(BODY_LENGTH + domain.length + workstation.length); - - - buf.write(protocol, pos, protocol.length); pos += protocol.length; // protocol - buf.writeUInt32LE(1, pos); pos += 4; // type 1 - buf.writeUInt32LE(type1flags, pos); pos += 4; // TYPE1 flag - - buf.writeUInt16LE(domain.length, pos); pos += 2; // domain length - buf.writeUInt16LE(domain.length, pos); pos += 2; // domain max length - buf.writeUInt32LE(BODY_LENGTH + workstation.length, pos); pos += 4; // domain buffer offset - - buf.writeUInt16LE(workstation.length, pos); pos += 2; // workstation length - buf.writeUInt16LE(workstation.length, pos); pos += 2; // workstation max length - buf.writeUInt32LE(BODY_LENGTH, pos); pos += 4; // workstation buffer offset - - buf.writeUInt8(5, pos); pos += 1; //ProductMajorVersion - buf.writeUInt8(1, pos); pos += 1; //ProductMinorVersion - buf.writeUInt16LE(2600, pos); pos += 2; //ProductBuild - - buf.writeUInt8(0 , pos); pos += 1; //VersionReserved1 - buf.writeUInt8(0 , pos); pos += 1; //VersionReserved2 - buf.writeUInt8(0 , pos); pos += 1; //VersionReserved3 - buf.writeUInt8(15, pos); pos += 1; //NTLMRevisionCurrent - - buf.write(workstation, pos, workstation.length, 'ascii'); pos += workstation.length; // workstation string - buf.write(domain , pos, domain.length , 'ascii'); pos += domain.length; - - return 'NTLM ' + buf.toString('base64'); -} - -function parseType2Message(rawmsg, callback){ - var match = rawmsg.match(/NTLM (.+)?/); - if(!match || !match[1]) - return callback(new Error("Couldn't find NTLM in the message type2 comming from the server")); - - var buf = new Buffer(match[1], 'base64'); - - var msg = {}; - - msg.signature = buf.slice(0, 8); - msg.type = buf.readInt16LE(8); - - if(msg.type != 2) - return callback(new Error("Server didn't return a type 2 message")); - - msg.targetNameLen = buf.readInt16LE(12); - msg.targetNameMaxLen = buf.readInt16LE(14); - msg.targetNameOffset = buf.readInt32LE(16); - msg.targetName = buf.slice(msg.targetNameOffset, msg.targetNameOffset + msg.targetNameMaxLen); - - msg.negotiateFlags = buf.readInt32LE(20); - msg.serverChallenge = buf.slice(24, 32); - msg.reserved = buf.slice(32, 40); - - if(msg.negotiateFlags & flags.NTLM_NegotiateTargetInfo){ - msg.targetInfoLen = buf.readInt16LE(40); - msg.targetInfoMaxLen = buf.readInt16LE(42); - msg.targetInfoOffset = buf.readInt32LE(44); - msg.targetInfo = buf.slice(msg.targetInfoOffset, msg.targetInfoOffset + msg.targetInfoLen); - } - return msg; -} - -function createType3Message(msg2, options){ - var nonce = msg2.serverChallenge; - var username = options.username; - var password = options.password; - var negotiateFlags = msg2.negotiateFlags; - - var isUnicode = negotiateFlags & flags.NTLM_NegotiateUnicode; - var isNegotiateExtendedSecurity = negotiateFlags & flags.NTLM_NegotiateExtendedSecurity; - - var BODY_LENGTH = 72; - - var domainName = escape(options.domain.toUpperCase()); - var workstation = escape(options.workstation.toUpperCase()); - - var workstationBytes, domainNameBytes, usernameBytes, encryptedRandomSessionKeyBytes; - - var encryptedRandomSessionKey = ""; - if(isUnicode){ - workstationBytes = new Buffer(workstation, 'utf16le'); - domainNameBytes = new Buffer(domainName, 'utf16le'); - usernameBytes = new Buffer(username, 'utf16le'); - encryptedRandomSessionKeyBytes = new Buffer(encryptedRandomSessionKey, 'utf16le'); - }else{ - workstationBytes = new Buffer(workstation, 'ascii'); - domainNameBytes = new Buffer(domainName, 'ascii'); - usernameBytes = new Buffer(username, 'ascii'); - encryptedRandomSessionKeyBytes = new Buffer(encryptedRandomSessionKey, 'ascii'); - } - - var lmChallengeResponse = calc_resp(create_LM_hashed_password_v1(password), nonce); - var ntChallengeResponse = calc_resp(create_NT_hashed_password_v1(password), nonce); - - if(isNegotiateExtendedSecurity){ - var pwhash = create_NT_hashed_password_v1(password); - var clientChallenge = ""; - for(var i=0; i < 8; i++){ - clientChallenge += String.fromCharCode( Math.floor(Math.random()*256) ); - } - var clientChallengeBytes = new Buffer(clientChallenge, 'ascii'); - var challenges = ntlm2sr_calc_resp(pwhash, nonce, clientChallengeBytes); - lmChallengeResponse = challenges.lmChallengeResponse; - ntChallengeResponse = challenges.ntChallengeResponse; - } - - var signature = 'NTLMSSP\0'; - - var pos = 0; - var buf = new Buffer(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length + ntChallengeResponse.length + encryptedRandomSessionKeyBytes.length); - - buf.write(signature, pos, signature.length); pos += signature.length; - buf.writeUInt32LE(3, pos); pos += 4; // type 1 - - buf.writeUInt16LE(lmChallengeResponse.length, pos); pos += 2; // LmChallengeResponseLen - buf.writeUInt16LE(lmChallengeResponse.length, pos); pos += 2; // LmChallengeResponseMaxLen - buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length, pos); pos += 4; // LmChallengeResponseOffset - - buf.writeUInt16LE(ntChallengeResponse.length, pos); pos += 2; // NtChallengeResponseLen - buf.writeUInt16LE(ntChallengeResponse.length, pos); pos += 2; // NtChallengeResponseMaxLen - buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length, pos); pos += 4; // NtChallengeResponseOffset - - buf.writeUInt16LE(domainNameBytes.length, pos); pos += 2; // DomainNameLen - buf.writeUInt16LE(domainNameBytes.length, pos); pos += 2; // DomainNameMaxLen - buf.writeUInt32LE(BODY_LENGTH, pos); pos += 4; // DomainNameOffset - - buf.writeUInt16LE(usernameBytes.length, pos); pos += 2; // UserNameLen - buf.writeUInt16LE(usernameBytes.length, pos); pos += 2; // UserNameMaxLen - buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length, pos); pos += 4; // UserNameOffset - - buf.writeUInt16LE(workstationBytes.length, pos); pos += 2; // WorkstationLen - buf.writeUInt16LE(workstationBytes.length, pos); pos += 2; // WorkstationMaxLen - buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length, pos); pos += 4; // WorkstationOffset - - buf.writeUInt16LE(encryptedRandomSessionKeyBytes.length, pos); pos += 2; // EncryptedRandomSessionKeyLen - buf.writeUInt16LE(encryptedRandomSessionKeyBytes.length, pos); pos += 2; // EncryptedRandomSessionKeyMaxLen - buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length + ntChallengeResponse.length, pos); pos += 4; // EncryptedRandomSessionKeyOffset - - buf.writeUInt32LE(typeflags.NTLM_TYPE2_FLAGS, pos); pos += 4; // NegotiateFlags - - buf.writeUInt8(5, pos); pos++; // ProductMajorVersion - buf.writeUInt8(1, pos); pos++; // ProductMinorVersion - buf.writeUInt16LE(2600, pos); pos += 2; // ProductBuild - buf.writeUInt8(0, pos); pos++; // VersionReserved1 - buf.writeUInt8(0, pos); pos++; // VersionReserved2 - buf.writeUInt8(0, pos); pos++; // VersionReserved3 - buf.writeUInt8(15, pos); pos++; // NTLMRevisionCurrent - - domainNameBytes.copy(buf, pos); pos += domainNameBytes.length; - usernameBytes.copy(buf, pos); pos += usernameBytes.length; - workstationBytes.copy(buf, pos); pos += workstationBytes.length; - lmChallengeResponse.copy(buf, pos); pos += lmChallengeResponse.length; - ntChallengeResponse.copy(buf, pos); pos += ntChallengeResponse.length; - encryptedRandomSessionKeyBytes.copy(buf, pos); pos += encryptedRandomSessionKeyBytes.length; - - return 'NTLM ' + buf.toString('base64'); -} - -function create_LM_hashed_password_v1(password){ - // fix the password length to 14 bytes - password = password.toUpperCase(); - var passwordBytes = new Buffer(password, 'ascii'); - - var passwordBytesPadded = new Buffer(14); - passwordBytesPadded.fill("\0"); - var sourceEnd = 14; - if(passwordBytes.length < 14) sourceEnd = passwordBytes.length; - passwordBytes.copy(passwordBytesPadded, 0, 0, sourceEnd); - - // split into 2 parts of 7 bytes: - var firstPart = passwordBytesPadded.slice(0,7); - var secondPart = passwordBytesPadded.slice(7); - - function encrypt(buf){ - var key = insertZerosEvery7Bits(buf); - var des = crypto.createCipheriv('DES-ECB', key, ''); - return des.update("KGS!@#$%"); // page 57 in [MS-NLMP]); - } - - var firstPartEncrypted = encrypt(firstPart); - var secondPartEncrypted = encrypt(secondPart); - - return Buffer.concat([firstPartEncrypted, secondPartEncrypted]); -} - -function insertZerosEvery7Bits(buf){ - var binaryArray = bytes2binaryArray(buf); - var newBinaryArray = []; - for(var i=0; i array.length) - break; - - var binString1 = '' + array[i] + '' + array[i+1] + '' + array[i+2] + '' + array[i+3]; - var binString2 = '' + array[i+4] + '' + array[i+5] + '' + array[i+6] + '' + array[i+7]; - var hexchar1 = binary2hex[binString1]; - var hexchar2 = binary2hex[binString2]; - - var buf = new Buffer(hexchar1 + '' + hexchar2, 'hex'); - bufArray.push(buf); - } - - return Buffer.concat(bufArray); -} - -function create_NT_hashed_password_v1(password){ - var buf = new Buffer(password, 'utf16le'); - var md4 = crypto.createHash('md4'); - md4.update(buf); - return new Buffer(md4.digest()); -} - -function calc_resp(password_hash, server_challenge){ - // padding with zeros to make the hash 21 bytes long - var passHashPadded = new Buffer(21); - passHashPadded.fill("\0"); - password_hash.copy(passHashPadded, 0, 0, password_hash.length); - - var resArray = []; - - var des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(0,7)), ''); - resArray.push( des.update(server_challenge.slice(0,8)) ); - - des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(7,14)), ''); - resArray.push( des.update(server_challenge.slice(0,8)) ); - - des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(14,21)), ''); - resArray.push( des.update(server_challenge.slice(0,8)) ); - - return Buffer.concat(resArray); -} - -function ntlm2sr_calc_resp(responseKeyNT, serverChallenge, clientChallenge){ - // padding with zeros to make the hash 16 bytes longer - var lmChallengeResponse = new Buffer(clientChallenge.length + 16); - lmChallengeResponse.fill("\0"); - clientChallenge.copy(lmChallengeResponse, 0, 0, clientChallenge.length); - - var buf = Buffer.concat([serverChallenge, clientChallenge]); - var md5 = crypto.createHash('md5'); - md5.update(buf); - var sess = md5.digest(); - var ntChallengeResponse = calc_resp(responseKeyNT, sess.slice(0,8)); - - return { - lmChallengeResponse: lmChallengeResponse, - ntChallengeResponse: ntChallengeResponse - }; -} - -exports.createType1Message = createType1Message; -exports.parseType2Message = parseType2Message; -exports.createType3Message = createType3Message; - - - diff --git a/node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt b/node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt deleted file mode 100644 index b341600..0000000 --- a/node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt +++ /dev/null @@ -1,6 +0,0 @@ -// This software (ntlm.js) was copied from a file of the same name at https://github.com/SamDecrock/node-http-ntlm/blob/master/ntlm.js. -// -// As of this writing, it is a part of the node-http-ntlm module produced by SamDecrock. -// -// It is used as a part of the NTLM support provided by the vso-node-api library. -// diff --git a/node_modules/typed-rest-client/package.json b/node_modules/typed-rest-client/package.json index e16f729..1b6dd83 100644 --- a/node_modules/typed-rest-client/package.json +++ b/node_modules/typed-rest-client/package.json @@ -1,73 +1,47 @@ -{ - "_from": "typed-rest-client@^1.4.0", - "_id": "typed-rest-client@1.5.0", - "_inBundle": false, - "_integrity": "sha512-DVZRlmsfnTjp6ZJaatcdyvvwYwbWvR4YDNFDqb+qdTxpvaVP99YCpBkA8rxsLtAPjBVoDe4fNsnMIdZTiPuKWg==", - "_location": "/typed-rest-client", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "typed-rest-client@^1.4.0", - "name": "typed-rest-client", - "escapedName": "typed-rest-client", - "rawSpec": "^1.4.0", - "saveSpec": null, - "fetchSpec": "^1.4.0" - }, - "_requiredBy": [ - "/@actions/tool-cache" - ], - "_resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.5.0.tgz", - "_shasum": "c0dda6e775b942fd46a2d99f2160a94953206fc2", - "_spec": "typed-rest-client@^1.4.0", - "_where": "C:\\Users\\damccorm\\Documents\\setup-go\\node_modules\\@actions\\tool-cache", - "author": { - "name": "Microsoft Corporation" - }, - "bugs": { - "url": "https://github.com/Microsoft/typed-rest-client/issues" - }, - "bundleDependencies": false, - "dependencies": { - "tunnel": "0.0.4", - "underscore": "1.8.3" - }, - "deprecated": false, - "description": "Node Rest and Http Clients for use with TypeScript", - "devDependencies": { - "@types/mocha": "^2.2.44", - "@types/node": "^6.0.92", - "@types/shelljs": "0.7.4", - "mocha": "^3.5.3", - "nock": "9.6.1", - "react-scripts": "1.1.5", - "semver": "4.3.3", - "shelljs": "0.7.6", - "typescript": "3.1.5" - }, - "homepage": "https://github.com/Microsoft/typed-rest-client#readme", - "keywords": [ - "rest", - "http", - "client", - "typescript", - "node" - ], - "license": "MIT", - "main": "./RestClient.js", - "name": "typed-rest-client", - "repository": { - "type": "git", - "url": "git+https://github.com/Microsoft/typed-rest-client.git" - }, - "scripts": { - "bt": "node make.js buildtest", - "build": "node make.js build", - "samples": "node make.js samples", - "test": "node make.js test", - "units": "node make.js units", - "validate": "node make.js validate" - }, - "version": "1.5.0" -} +{ + "name": "typed-rest-client", + "version": "1.8.0", + "description": "Node Rest and Http Clients for use with TypeScript", + "main": "./RestClient.js", + "scripts": { + "build": "node make.js build", + "test": "node make.js test", + "bt": "node make.js buildtest", + "samples": "node make.js samples", + "units": "node make.js units", + "validate": "node make.js validate" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/typed-rest-client.git" + }, + "keywords": [ + "rest", + "http", + "client", + "typescript", + "node" + ], + "author": "Microsoft Corporation", + "license": "MIT", + "bugs": { + "url": "https://github.com/Microsoft/typed-rest-client/issues" + }, + "homepage": "https://github.com/Microsoft/typed-rest-client#readme", + "devDependencies": { + "@types/mocha": "^2.2.44", + "@types/node": "^6.0.92", + "@types/shelljs": "0.7.4", + "mocha": "^3.5.3", + "nock": "9.6.1", + "react-scripts": "1.1.5", + "semver": "4.3.3", + "shelljs": "0.7.6", + "typescript": "3.1.5" + }, + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "1.8.3" + } +} diff --git a/node_modules/underscore/package.json b/node_modules/underscore/package.json index 1f9eb60..0a9126b 100644 --- a/node_modules/underscore/package.json +++ b/node_modules/underscore/package.json @@ -1,51 +1,6 @@ { - "_from": "underscore@1.8.3", - "_id": "underscore@1.8.3", - "_inBundle": false, - "_integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "_location": "/underscore", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "underscore@1.8.3", - "name": "underscore", - "escapedName": "underscore", - "rawSpec": "1.8.3", - "saveSpec": null, - "fetchSpec": "1.8.3" - }, - "_requiredBy": [ - "/typed-rest-client" - ], - "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "_shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022", - "_spec": "underscore@1.8.3", - "_where": "C:\\Users\\damccorm\\Documents\\setup-go\\node_modules\\typed-rest-client", - "author": { - "name": "Jeremy Ashkenas", - "email": "jeremy@documentcloud.org" - }, - "bugs": { - "url": "https://github.com/jashkenas/underscore/issues" - }, - "bundleDependencies": false, - "deprecated": false, + "name": "underscore", "description": "JavaScript's functional programming helper library.", - "devDependencies": { - "docco": "*", - "eslint": "0.6.x", - "karma": "~0.12.31", - "karma-qunit": "~0.1.4", - "qunit-cli": "~0.2.0", - "uglify-js": "2.4.x" - }, - "files": [ - "underscore.js", - "underscore-min.js", - "underscore-min.map", - "LICENSE" - ], "homepage": "http://underscorejs.org", "keywords": [ "util", @@ -54,20 +9,34 @@ "client", "browser" ], - "license": "MIT", - "main": "underscore.js", - "name": "underscore", + "author": "Jeremy Ashkenas ", "repository": { "type": "git", "url": "git://github.com/jashkenas/underscore.git" }, + "main": "underscore.js", + "version": "1.8.3", + "devDependencies": { + "docco": "*", + "eslint": "0.6.x", + "karma": "~0.12.31", + "karma-qunit": "~0.1.4", + "qunit-cli": "~0.2.0", + "uglify-js": "2.4.x" + }, "scripts": { - "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m --source-map underscore-min.map -o underscore-min.js", - "doc": "docco underscore.js", - "lint": "eslint underscore.js test/*.js", "test": "npm run test-node && npm run lint", + "lint": "eslint underscore.js test/*.js", + "test-node": "qunit-cli test/*.js", "test-browser": "npm i karma-phantomjs-launcher && ./node_modules/karma/bin/karma start", - "test-node": "qunit-cli test/*.js" + "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m --source-map underscore-min.map -o underscore-min.js", + "doc": "docco underscore.js" }, - "version": "1.8.3" + "license": "MIT", + "files": [ + "underscore.js", + "underscore-min.js", + "underscore-min.map", + "LICENSE" + ] }