diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..92cb96ab1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +end_of_line = lf + +# editorconfig-tools is unable to ignore longs strings or urls +max_line_length = null diff --git a/.gitignore b/.gitignore index 0adf7cedc..feb12474f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules npm-debug.log dist coverage +.rpt2_cache diff --git a/.prettierrc.yml b/.prettierrc.yml new file mode 100644 index 000000000..310957302 --- /dev/null +++ b/.prettierrc.yml @@ -0,0 +1,5 @@ +printWidth: 100 +singleQuote: true +trailingComma: all +tabWidth: 2 +useTabs: false diff --git a/.travis.yml b/.travis.yml index cd8c14a56..4e465ec56 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,4 +37,4 @@ jobs: - stage: release node_js: 10.0.0 script: - - npm run semantic-release + - npm run release diff --git a/CHANGELOG.md b/CHANGELOG.md index 472f1a0b2..f05a35f02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,31 @@ + +# [5.0.0-rc.1](https://github.com/jdalrymple/node-gitlab/compare/4.2.0...5.0.0) (2018-11-07) + +### Breaking +* Added content as a required parameter for RepositoryFiles +* Removed projectId from System Hooks API since it wasn't required +* Removed dependency on FS. Now the Projects API takes in two arguments `projectId` and `content` as well as an option fileName argument +* Changing everything to named exports for simplicity +* Switching required initialization argument from 'url' to 'host' +* Updated Approvals API support to match https://docs.gitlab.com/ee/api/merge_request_approvals.html +* MergeRequest Pipelines require the mergeRequestId +* NotificationSettings API edit function now takes one parameter, `options` +* Changing the access level enum property from master to maintainer as per https://gitlab.com/gitlab-org/gitlab-ce/issues/42751 +* Notes now require a body argument instead of checking the options argument for a body parameter + +## Bug Fixes +* #227 (https://github.com/jdalrymple/node-gitlab/issues/227) Fixing array syntax thanks to Lukas Eipert (https://github.com/leipert) (f9bc34d (https://github.com/jdalrymple/node-gitlab/commit/f9bc34d)) +* Fixing Todos support. If todoId was not passed, an undefined value would be introduced into the url (cbeef18 (https://github.com/jdalrymple/node-gitlab/commit/cbeef18)) +* ResourceAwardEmojis API wasn't properly filtering based on awardId (70f4315 (https://github.com/jdalrymple/node-gitlab/commit/70f4315)) +* Removed xhr library in favour of ky, and switched request for got for a smaller package size and retry functionality + +## Features +* Adding the ability to add sudo to specific requests (780244f (https://github.com/jdalrymple/node-gitlab/commit/780244f)) + +## Documentation +* Removing xml request docs +* Updating imports to be named imports + ## [4.2.7](https://github.com/jdalrymple/node-gitlab/compare/4.2.6...4.2.7) (2018-11-26) diff --git a/README.md b/README.md index ee3c30208..a686eb8db 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ [![Coverage](https://img.shields.io/codecov/c/github/jdalrymple/node-gitlab/master.svg)](https://codecov.io/gh/jdalrymple/node-gitlab) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/) +[![Code Style: Prettier](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg) +[![Install Size](https://packagephobia.now.sh/badge?p=gitlab)](https://packagephobia.now.sh/result?p=gitlab) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/jdalrymple/node-gitlab/blob/master/LICENSE.md) # node-gitlab @@ -139,22 +141,22 @@ Instantiate the library using a basic token created in your [Gitlab Profile](htt ```javascript // ES6 (>=node 8.0.0) -import Gitlab from 'gitlab'; +import { Gitlab } from 'gitlab'; -// ES5, assuming Promise and Object.assign are available -const Gitlab = require('gitlab/dist/es5').default +// ES5, assuming native or polyfilled Promise is available +const Gitlab = require('gitlab') // Instantiating const api = new Gitlab({ - url: 'http://example.com', // Defaults to http://gitlab.com + host: 'http://example.com', // Defaults to http://gitlab.com token: 'abcdefghij123456' // Can be created in your profile. }) // Or, use a OAuth token instead! const api = new Gitlab({ - url: 'http://example.com', // Defaults to http://gitlab.com + host: 'http://example.com', // Defaults to http://gitlab.com oauthToken: 'abcdefghij123456' }) @@ -168,7 +170,7 @@ Sometimes you don't want to import and instantiate the whole Gitlab API, perhaps import { Projects } from 'gitlab'; const service = new Projects({ - url: 'http://example.com', // Defaults to http://gitlab.com + host: 'http://example.com', // Defaults to http://gitlab.com token: 'abcdefghij123456' // Can be created in your profile. }) @@ -183,7 +185,7 @@ It can be annoying to have to import all the API's pertaining to a specific reso import { ProjectsBundle } from 'gitlab'; const services = new ProjectsBundle({ - url: 'http://example.com', // Defaults to http://gitlab.com + host: 'http://example.com', // Defaults to http://gitlab.com token: 'abcdefghij123456' // Can be created in your profile. }) @@ -266,32 +268,16 @@ EpicNotes EpicDiscussions ``` -### Using XMLHttpRequest -This package uses the [Request](https://github.com/request/request) library by default, which is built into Node. However, if your code is running in a browser, you can get better built-in resolution of proxies and self-signed certificates by using the browser's XMLHttpRequest implementation instead: - -```javascript -import Gitlab from 'gitlab'; - -const api = new Gitlab({ - url: 'http://example.com', // Defaults to http://gitlab.com - token: 'abcdefghij123456', // Can be created in your profile. - - useXMLHttpRequest: true // Use the browser's XMLHttpRequest instead of Node's Request library -}) -``` - -**WARNING:** Currently this option does not support the `multipart/form-data` content type, and therefore the endpoint for [uploading a file to a project](https://docs.gitlab.com/ee/api/projects.html#upload-a-file) will not work correctly. All other endpoints should work exactly as expected. - ### Examples Once you have your library instantiated, you can utilize many of the API's functionality: Using the await/async method ```javascript -import Gitlab from 'gitlab'; +import { Gitlab } from 'gitlab'; const api = new Gitlab({ - url: 'http://example.com', // Defaults to http://gitlab.com + host: 'http://example.com', // Defaults to http://gitlab.com token: 'abcdefghij123456' // Can be created in your profile. }); @@ -312,10 +298,10 @@ General rule about all the function parameters: ie. ```javascript -import Gitlab from 'gitlab'; +import { Gitlab } from 'gitlab'; const api = new Gitlab({ - url: 'http://example.com', // Defaults to http://gitlab.com + host: 'http://example.com', // Defaults to http://gitlab.com token: 'abcdefghij123456' // Can be created in your profile. }); @@ -329,10 +315,10 @@ api.Projects.create(projectId, { For any .all() function on a resource, it will return all the items from Gitlab. This can be troublesome if there are many items, as the request it self can take a while to be fulfilled. As such, a maxPages option can be passed to limit the scope of the all function. ```javascript -import Gitlab from 'gitlab'; +import { Gitlab } from 'gitlab'; const api = new Gitlab({ - url: 'http://example.com', // Defaults to http://gitlab.com + host: 'http://example.com', // Defaults to http://gitlab.com token: 'abcdefghij123456' // Can be created in your profile. }); @@ -343,10 +329,10 @@ let projects = await api.Projects.all({ maxPages:2 }); You can also use this in conjunction to the perPage argument which would override the default of 30 per page set by Gitlab: ```javascript -import Gitlab from 'gitlab'; +import { Gitlab } from 'gitlab'; const api = new Gitlab({ - url: 'http://example.com', // Defaults to http://gitlab.com + host: 'http://example.com', // Defaults to http://gitlab.com token: 'abcdefghij123456' // Can be created in your profile. }); @@ -359,7 +345,11 @@ Additionally, if you would like to get back the pagination information, to know ```javascript ... -let { data, pagination } = await api.Projects.all({ perPage:40, maxPages:2, showPagination: true }); +const { data, pagination } = await api.Projects.all({ + perPage:40, + maxPages:2, + showPagination: true +}); ... ``` @@ -420,9 +410,7 @@ And then inside whatever project you are using `node-gitlab` in you change your ```json "dependencies": { - ... - "node-gitlab": "2.1.0" - ... + "gitlab": "5.0.0" } ``` @@ -430,9 +418,7 @@ to this ```json "dependencies": { - ... - "node-gitlab": "" - ... + "gitlab": "" } ``` @@ -499,7 +485,8 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - [Pavel Birukov](https://github.com/r00ger) - [Sharma-Rajat](https://github.com/Sharma-Rajat) - [Joseph Petersen](https://github.com/casz) -- [Igor Katsuba](https://github.com/Defenderbass) +- [Igor Katsuba](https://github.com/IKatsuba) +- [Giuseppe Angri](https://github.com/giuseppeangri) - [Michael Townsend](https://github.com/Continuities) - [bodtx](https://github.com/bodtx) - [Artem](https://github.com/arthot) @@ -509,6 +496,13 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - [Norm MacLennan](https://github.com/maclennann) - [jnovick](https://github.com/jnovick) - [Fabian Aussems](https://github.com/mozinator) +- [jennparise](https://github.com/jennparise) +- [Michael Matzka](https://github.com/mimaidms) +- [CraigAllardyce](https://github.com/CraigAllardyce) +- [Bruno Guimarães](https://github.com/brunobastosg) +- [Louis Cherel](https://github.com/Musinux) +- [Lukas Eipert](https://github.com/leipert) +- [Maximilian Krauß](https://github.com/maximilian-krauss) ## License diff --git a/package-lock.json b/package-lock.json index a90c4b658..b45a4d08c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "gitlab", - "version": "4.2.7", + "version": "5.0.0-rc.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -58,9 +58,9 @@ } }, "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz", + "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==", "dev": true }, "@octokit/rest": { @@ -142,28 +142,28 @@ } }, "@semantic-release/github": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-5.2.1.tgz", - "integrity": "sha512-EVh5MCMOSl5WfOIum+k7fb7ZaDBcZAepPvtMrJOn8HKa9MERK6PgT76OKro+tReWjT1PnGiaKjofjyRC4BhN6Q==", - "dev": true, - "requires": { - "@octokit/rest": "15.15.1", - "@semantic-release/error": "2.2.0", - "aggregate-error": "1.0.0", - "bottleneck": "2.12.2", - "debug": "4.1.0", - "dir-glob": "2.0.0", - "fs-extra": "7.0.0", - "globby": "8.0.1", - "http-proxy-agent": "2.1.0", - "https-proxy-agent": "2.2.1", - "issue-parser": "3.0.0", - "lodash": "4.17.10", - "mime": "2.3.1", - "p-filter": "1.0.0", - "p-retry": "2.0.0", - "parse-github-url": "1.0.2", - "url-join": "4.0.0" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-5.2.0.tgz", + "integrity": "sha512-w2EQjCWrNVOD1P2uPFOWQh8cVVc+N2l+DMLa4opFN4fc5TRDO1En0WA1S76JbQBn+fXp5uYQFt+KTGsVatg2OA==", + "dev": true, + "requires": { + "@octokit/rest": "^15.2.0", + "@semantic-release/error": "^2.2.0", + "aggregate-error": "^1.0.0", + "bottleneck": "^2.0.1", + "debug": "^4.0.0", + "dir-glob": "^2.0.0", + "fs-extra": "^7.0.0", + "globby": "^8.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "issue-parser": "^3.0.0", + "lodash": "^4.17.4", + "mime": "^2.0.3", + "p-filter": "^1.0.0", + "p-retry": "^2.0.0", + "parse-github-url": "^1.0.1", + "url-join": "^4.0.0" } }, "@semantic-release/npm": { @@ -189,20 +189,21 @@ } }, "@semantic-release/release-notes-generator": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-7.1.3.tgz", - "integrity": "sha512-J1zrtP9l2MXNnVnPZCpQV/YbLmmaDS4MN7Pp2OYj5ZcARxN/3xxIPrmf10CAgzirPw2Wqxlwg3DjcIchDJVkgg==", - "dev": true, - "requires": { - "conventional-changelog-angular": "5.0.2", - "conventional-changelog-writer": "4.0.2", - "conventional-commits-filter": "2.0.1", - "conventional-commits-parser": "3.0.1", - "debug": "4.1.0", - "get-stream": "4.1.0", - "import-from": "2.1.0", - "into-stream": "4.0.0", - "lodash": "4.17.10" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-7.1.1.tgz", + "integrity": "sha512-UbF0aU/RHeOW38jYcOPJFEqqxq01zKuaT54cdzyaci3cH8jfocR7YaPevtx7PTnwmha54ukuT+JQ9vBViYPTZw==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.0", + "conventional-changelog-writer": "^4.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.0.0", + "debug": "^4.0.0", + "get-stream": "^4.0.0", + "git-url-parse": "^10.0.1", + "import-from": "^2.1.0", + "into-stream": "^4.0.0", + "lodash": "^4.17.4" }, "dependencies": { "get-stream": { @@ -216,27 +217,28 @@ } } }, - "@types/bluebird": { - "version": "3.5.23", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.23.tgz", - "integrity": "sha512-xlehmc6RT+wMEhy9ZqeqmozVmuFzTfsaV2NlfFFWhigy7n6sjMbUUB+SZBWK78lZgWHA4DBAdQvQxUvcB8N1tw==", - "dev": true - }, - "@types/caseless": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.1.tgz", - "integrity": "sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A==", - "dev": true + "@sindresorhus/is": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.11.0.tgz", + "integrity": "sha512-i5Zh5+3QARyXtzq3Bd2Lg3aBRFLcgYbNoap3Hyu1uRN8X+D+0JMqqc4uk4XjhNxfVdCnL8WHUA2wxa33QCC50w==", + "requires": { + "symbol-observable": "^1.2.0" + } }, - "@types/form-data": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", - "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", - "dev": true, + "@szmarczak/http-timer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.1.tgz", + "integrity": "sha512-WljfOGkmSJe8SUkl+4TPvN2ec0dpUGVyfTBQLoXJUiILs+wBSc4Kvp2N3aAWE4VwwDSLGdmD3/bufS5BgZpVSQ==", "requires": { - "@types/node": "10.7.1" + "defer-to-connect": "^1.0.1" } }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, "@types/humps": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@types/humps/-/humps-1.1.2.tgz", @@ -244,9 +246,9 @@ "dev": true }, "@types/jest": { - "version": "23.3.9", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.3.9.tgz", - "integrity": "sha512-wNMwXSUcwyYajtbayfPp55tSayuDVU6PfY5gzvRSj80UvxdXEJOVPnUVajaOp7NgXLm+1e2ZDLULmpsU9vDvQw==", + "version": "23.3.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.3.5.tgz", + "integrity": "sha512-3LI+vUC3Wju28vbjIjsTKakhMB8HC4l+tMz+Z8WRzVK+kmvezE5jcOvKtBpznWSI5KDLFo+FouUhpTKoekadCA==", "dev": true }, "@types/node": { @@ -255,58 +257,6 @@ "integrity": "sha512-EGoI4ylB/lPOaqXqtzAyL8HcgOuCtH2hkEaLmkueOYufsTFWBn4VCvlCDC2HW8Q+9iF+QVC3sxjDKQYjHQeZ9w==", "dev": true }, - "@types/parse-link-header": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-link-header/-/parse-link-header-1.0.0.tgz", - "integrity": "sha512-fCA3btjE7QFeRLfcD0Sjg+6/CnmC66HpMBoRfRzd2raTaWMJV21CCZ0LO8MOqf8onl5n0EPfjq4zDhbyX8SVwA==", - "dev": true - }, - "@types/qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-mNhVdZHdtKHMMxbqzNK3RzkBcN1cux3AvuCYGTvjEIQT2uheH3eCAyYsbMbh2Bq8nXkeOWs1kyDiF7geWRFQ4Q==", - "dev": true - }, - "@types/request": { - "version": "2.47.1", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.47.1.tgz", - "integrity": "sha512-TV3XLvDjQbIeVxJ1Z3oCTDk/KuYwwcNKVwz2YaT0F5u86Prgc4syDAp6P96rkTQQ4bIdh+VswQIC9zS6NjY7/g==", - "dev": true, - "requires": { - "@types/caseless": "0.12.1", - "@types/form-data": "2.2.1", - "@types/node": "10.7.1", - "@types/tough-cookie": "2.3.3" - } - }, - "@types/request-promise": { - "version": "4.1.42", - "resolved": "https://registry.npmjs.org/@types/request-promise/-/request-promise-4.1.42.tgz", - "integrity": "sha512-b8li55sEZ00BXZstZ3d8WOi48dnapTqB1VufEG9Qox0nVI2JVnTVT1Mw4JbBa1j+1sGVX/qJ0R4WDv4v2GjT0w==", - "dev": true, - "requires": { - "@types/bluebird": "3.5.23", - "@types/request": "2.47.1" - } - }, - "@types/tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha512-MDQLxNFRLasqS4UlkWMSACMKeSm1x4Q3TxzUC7KQUsh6RK1ZrQ0VEyE3yzXcBu+K8ejVj4wuX32eUG02yNp+YQ==", - "dev": true - }, - "@types/url-join": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-0.8.2.tgz", - "integrity": "sha1-EYHsvh2XtwNODqHjXmLobMJrQi0=", - "dev": true - }, - "@types/util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-JK7Ecs9ETHfYSoG5ZILe30Ar9fmMT7vZTirfZQQ9OAZDB8TfPVV6aQkYPtfx2MFfB+yrSY4jCfrvMdemv/9VHw==", - "dev": true - }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -376,6 +326,7 @@ "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, "requires": { "co": "4.6.0", "fast-deep-equal": "1.1.0", @@ -517,6 +468,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { "safer-buffer": "2.1.2" } @@ -524,7 +476,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "assign-symbols": { "version": "1.0.0", @@ -567,12 +520,14 @@ "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=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true }, "babel-code-frame": { "version": "6.26.0", @@ -955,26 +910,22 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "optional": true, "requires": { "tweetnacl": "0.14.5" } }, "before-after-hook": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.2.0.tgz", - "integrity": "sha512-wI3QtdLppHNkmM1VgRVLCrlWCKk/YexlPicYbXPs4eYdd1InrUCTFsx5bX1iUQzzMsoRXXPpM1r+p7JEJJydag==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.1.0.tgz", + "integrity": "sha512-VOMDtYPwLbIncTxNoSzRyvaMxtXmLWLUqr8k5AfC1BzLk34HvBXaQX8snOwQZ4c0aX8aSERqtJSiI9/m2u5kuA==", "dev": true }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, "bottleneck": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.12.2.tgz", - "integrity": "sha512-9HrCO+5MJ0wmendPQSWaA9myojLavaEbkwZbsEjNK83nWPfkhFZN+5cYLhRKu1lRqn36cjO5r3qMJ7/JUN5hQQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.12.1.tgz", + "integrity": "sha512-wPHlAip5O1Po5AoDIyMRb7K2LgxmkOviAS91wsOgaa3hg0D8tOHuctQdg1F5fWG9Csi1wYQlU6sTSAp2PhejCw==", "dev": true }, "brace-expansion": { @@ -1084,6 +1035,30 @@ "unset-value": "1.0.0" } }, + "cacheable-request": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-5.0.0.tgz", + "integrity": "sha512-gU53XCfodl+GZ37ecX/uLobGE+WvgE2QE3VfhX7sPf04Kc35tNPip3IfCKfqJ2e04HLuHRxFCWgGWttv8OQbfw==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^4.0.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^1.0.1", + "normalize-url": "^3.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -1135,7 +1110,8 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "chalk": { "version": "2.4.1", @@ -1203,10 +1179,19 @@ "wrap-ansi": "2.1.0" } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true }, "code-point-at": { "version": "1.1.0", @@ -1295,9 +1280,9 @@ "dev": true }, "conventional-changelog-angular": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.2.tgz", - "integrity": "sha512-yx7m7lVrXmt4nKWQgWZqxSALEiAKZhOAcbxdUaU9575mB0CzXVbgrgpfSnSP7OqWDUTYGD0YVJ0MSRdyOPgAwA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.1.tgz", + "integrity": "sha512-q4ylJ68fWZDdrFC9z4zKcf97HW6hp7Mo2YlqD4owfXhecFKy/PJCU/1oVFF4TqochchChqmZ0Vb0e0g8/MKNlA==", "dev": true, "requires": { "compare-func": "1.3.2", @@ -1305,21 +1290,21 @@ } }, "conventional-changelog-writer": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.2.tgz", - "integrity": "sha512-d8/FQY/fix2xXEBUhOo8u3DCbyEw3UOQgYHxLsPDw+wHUDma/GQGAGsGtoH876WyNs32fViHmTOUrgRKVLvBug==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.0.tgz", + "integrity": "sha512-hMZPe0AQ6Bi05epeK/7hz80xxk59nPA5z/b63TOHq2wigM0/akreOc8N4Jam5b9nFgKWX1e9PdPv2ewgW6bcfg==", "dev": true, "requires": { - "compare-func": "1.3.2", - "conventional-commits-filter": "2.0.1", - "dateformat": "3.0.3", - "handlebars": "4.0.12", - "json-stringify-safe": "5.0.1", - "lodash": "4.17.10", - "meow": "4.0.1", - "semver": "5.5.0", - "split": "1.0.1", - "through2": "2.0.3" + "compare-func": "^1.3.1", + "conventional-commits-filter": "^2.0.0", + "dateformat": "^3.0.0", + "handlebars": "^4.0.2", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "semver": "^5.5.0", + "split": "^1.0.0", + "through2": "^2.0.0" } }, "conventional-commit-types": { @@ -1329,9 +1314,9 @@ "dev": true }, "conventional-commits-filter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz", - "integrity": "sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.0.tgz", + "integrity": "sha512-Cfl0j1/NquB/TMVx7Wrmyq7uRM+/rPQbtVVGwzfkhZ6/yH6fcMmP0Q/9044TBZPTNdGzm46vXFXL14wbET0/Mg==", "dev": true, "requires": { "is-subset": "0.1.1", @@ -1339,9 +1324,9 @@ } }, "conventional-commits-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz", - "integrity": "sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.0.tgz", + "integrity": "sha512-GWh71U26BLWgMykCp+VghZ4s64wVbtseECcKQ/PvcPZR2cUnz+FUc2J9KjxNl7/ZbCxST8R03c9fc+Vi0umS9Q==", "dev": true, "requires": { "JSONStream": "1.3.5", @@ -1377,7 +1362,8 @@ "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=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cosmiconfig": { "version": "5.0.6", @@ -1444,6 +1430,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { "assert-plus": "1.0.0" } @@ -1514,8 +1501,15 @@ "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 + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } }, "deep-extend": { "version": "0.6.0", @@ -1538,6 +1532,11 @@ "strip-bom": "2.0.0" } }, + "defer-to-connect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.1.tgz", + "integrity": "sha512-2e0FJesseUqQj671gvZWfUyxpnFx/5n4xleamlpCD3U6Fm5dh5qzmmLNxNhtmHF06+SYVHH8QU6FACffYTnj0Q==" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1645,11 +1644,6 @@ } } }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", @@ -1677,10 +1671,16 @@ "readable-stream": "2.3.6" } }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, "optional": true, "requires": { "jsbn": "0.1.1", @@ -1691,7 +1691,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, "requires": { "once": "1.4.0" } @@ -1800,6 +1799,12 @@ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -1965,7 +1970,8 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "extend-shallow": { "version": "3.0.2", @@ -2056,12 +2062,14 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true }, "fast-glob": { "version": "2.2.3", @@ -2080,7 +2088,8 @@ "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=" + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -2164,14 +2173,6 @@ "semver-regex": "1.0.0" } }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "1.1.4" - } - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -2190,16 +2191,17 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.19" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, "fragment-cache": { @@ -2801,6 +2803,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, "requires": { "assert-plus": "1.0.0" } @@ -2830,6 +2833,25 @@ } } }, + "git-up": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-2.0.10.tgz", + "integrity": "sha512-2v4UN3qV2RGypD9QpmUjpk+4+RlYpW8GFuiZqQnKmvei08HsFPd0RfbDvEhnE4wBvnYs8ORVtYpOFuuCEmBVBw==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^1.3.0" + } + }, + "git-url-parse": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-10.1.0.tgz", + "integrity": "sha512-goZOORAtFjU1iG+4zZgWq+N7It09PqS3Xsy43ZwhP5unDD0tTSmXTpqULHodMdJXGejm3COwXIhIRT6Z8DYVZQ==", + "dev": true, + "requires": { + "git-up": "^2.0.0" + } + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -2907,15 +2929,6 @@ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "2.19.0", - "process": "0.5.2" - } - }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", @@ -2937,6 +2950,33 @@ "slash": "1.0.0" } }, + "got": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/got/-/got-9.2.2.tgz", + "integrity": "sha512-XLXmtO1QxLuzj6t4JBClWD1NI/bMvsR9utYl0yyPg49eUJjqU7HaQhPDvSVGwYoSbAqsRfe5aNZXHl1Zctzwmw==", + "requires": { + "@sindresorhus/is": "^0.11.0", + "@szmarczak/http-timer": "^1.1.0", + "cacheable-request": "^5.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.0.0", + "mimic-response": "^1.0.1", + "p-cancelable": "^0.5.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -2972,12 +3012,14 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "dev": true, "requires": { "ajv": "5.5.2", "har-schema": "2.0.0" @@ -3070,6 +3112,11 @@ "whatwg-encoding": "1.0.5" } }, + "http-cache-semantics": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", + "integrity": "sha512-NtexGRtaV5z3ZUX78W9UDTOJPBdpqms6RmwQXmOhHws7CuQK3cqIoQtnmeqi1VvVD6u6eMMRL0sKE9BCZXTDWQ==" + }, "http-proxy-agent": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", @@ -3101,6 +3148,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", @@ -3391,7 +3439,8 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true }, "is-ci": { "version": "1.2.1", @@ -3495,11 +3544,6 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, "is-generator-fn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", @@ -3515,6 +3559,12 @@ "is-extglob": "2.1.1" } }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -3577,6 +3627,15 @@ "has": "1.0.3" } }, + "is-ssh": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.0.tgz", + "integrity": "sha1-6+oRaaJhTaOSpjdANmw84EnY3/Y=", + "dev": true, + "requires": { + "protocols": "^1.1.0" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -3607,7 +3666,8 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-utf8": { "version": "0.2.1", @@ -3642,7 +3702,8 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "issue-parser": { "version": "3.0.0", @@ -4775,6 +4836,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, "optional": true }, "jsdom": { @@ -4817,6 +4879,11 @@ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, "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", @@ -4826,17 +4893,20 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true }, "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=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "json5": { "version": "0.5.1", @@ -4863,6 +4933,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -4870,6 +4941,14 @@ "verror": "1.10.0" } }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -4882,6 +4961,11 @@ "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==", "dev": true }, + "ky": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.4.1.tgz", + "integrity": "sha512-XPUHrQcAOV0jFeOLG0LhfXEOqjtbXpHOtAMW5cOB5M851sx+auA3r/6ZJbNlE45+zo2gsk0SOHeS3KyCvBYO7g==" + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -4956,7 +5040,8 @@ "lodash": { "version": "4.17.10", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true }, "lodash.assign": { "version": "4.2.0", @@ -5037,6 +5122,11 @@ "signal-exit": "3.0.2" } }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, "lru-cache": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", @@ -5053,6 +5143,15 @@ "integrity": "sha512-mmLbumEYMi5nXReB9js3WGsB8UE6cDBWyIO62Z4DNx6GbRhDxHNjA1MlzSpJ2S2KM1wyiPRA0d19uHWYYvMHjA==", "dev": true }, + "magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, "make-error": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", @@ -5300,13 +5399,10 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "0.1.1" - } + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "minimatch": { "version": "3.0.4", @@ -5484,8 +5580,7 @@ "normalize-url": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" }, "npm": { "version": "6.4.1", @@ -5615,7 +5710,8 @@ "dependencies": { "JSONStream": { "version": "1.3.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.4.tgz", + "integrity": "sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg==", "dev": true, "requires": { "jsonparse": "1.3.1", @@ -5624,12 +5720,14 @@ }, "abbrev": { "version": "1.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, "agent-base": { "version": "4.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", "dev": true, "requires": { "es6-promisify": "5.0.0" @@ -5637,7 +5735,8 @@ }, "agentkeepalive": { "version": "3.4.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-MPIwsZU9PP9kOrZpyu2042kYA8Fdt/AedQYkYXucHgF9QoD9dXVp0ypuGnHXSR0hTstBxdt85Xkh4JolYfK5wg==", "dev": true, "requires": { "humanize-ms": "1.2.1" @@ -5645,7 +5744,8 @@ }, "ajv": { "version": "5.5.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { "co": "4.6.0", @@ -5656,7 +5756,8 @@ }, "ansi-align": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, "requires": { "string-width": "2.1.1" @@ -5664,12 +5765,14 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { "version": "3.2.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" @@ -5677,27 +5780,32 @@ }, "ansicolors": { "version": "0.3.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", "dev": true }, "ansistyles": { "version": "0.1.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=", "dev": true }, "aproba": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, "archy": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "requires": { "delegates": "1.0.0", @@ -5706,12 +5814,14 @@ }, "asap": { "version": "2.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, "asn1": { "version": "0.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { "safer-buffer": "2.1.2" @@ -5719,32 +5829,38 @@ }, "assert-plus": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, "asynckit": { "version": "0.4.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "aws-sign2": { "version": "0.7.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, "aws4": { "version": "1.8.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, "balanced-match": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "optional": true, "requires": { @@ -5753,7 +5869,8 @@ }, "bin-links": { "version": "1.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-8eEHVgYP03nILphilltWjeIjMbKyJo3wvp9K816pHbhP301ismzw15mxAAEVQ/USUwcP++1uNrbERbp8lOA6Fg==", "dev": true, "requires": { "bluebird": "3.5.1", @@ -5765,7 +5882,8 @@ }, "block-stream": { "version": "0.0.9", - "bundled": true, + "resolved": false, + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, "requires": { "inherits": "2.0.3" @@ -5773,12 +5891,14 @@ }, "bluebird": { "version": "3.5.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "dev": true }, "boxen": { "version": "1.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, "requires": { "ansi-align": "2.0.0", @@ -5792,7 +5912,8 @@ }, "brace-expansion": { "version": "1.1.11", - "bundled": true, + "resolved": false, + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "1.0.0", @@ -5801,32 +5922,38 @@ }, "buffer-from": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", "dev": true }, "builtin-modules": { "version": "1.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, "builtins": { "version": "1.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, "byline": { "version": "5.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", "dev": true }, "byte-size": { "version": "4.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha512-JGC3EV2bCzJH/ENSh3afyJrH4vwxbHTuO5ljLoI5+2iJOcEpMgP8T782jH9b5qGxf2mSUIp1lfGnfKNrRHpvVg==", "dev": true }, "cacache": { "version": "11.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.2.0.tgz", + "integrity": "sha512-IFWl6lfK6wSeYCHUXh+N1lY72UDrpyrYQJNIVQf48paDuWbv5RbAtJYf/4gUQFObTCHZwdZ5sI8Iw7nqwP6nlQ==", "dev": true, "requires": { "bluebird": "3.5.1", @@ -5847,27 +5974,32 @@ }, "call-limit": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-b9YbA/PaQqLNDsK2DwK9DnGZH+o=", "dev": true }, "camelcase": { "version": "4.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, "capture-stack-trace": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", "dev": true }, "caseless": { "version": "0.12.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "chalk": { "version": "2.4.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { "ansi-styles": "3.2.1", @@ -5877,17 +6009,20 @@ }, "chownr": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", "dev": true }, "ci-info": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.4.0.tgz", + "integrity": "sha512-Oqmw2pVfCl8sCL+1QgMywPfdxPJPkC51y4usw0iiE2S9qnEOAqXy8bwl1CpMpnoU39g4iKJTz6QZj+28FvOnjQ==", "dev": true }, "cidr-regex": { "version": "2.0.9", - "bundled": true, + "resolved": false, + "integrity": "sha512-F7/fBRUU45FnvSPjXdpIrc++WRSBdCiSTlyq4ZNhLKOlHFNWgtzZ0Fd+zrqI/J1j0wmlx/f5ZQDmD2GcbrNcmw==", "dev": true, "requires": { "ip-regex": "2.1.0" @@ -5895,12 +6030,14 @@ }, "cli-boxes": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", "dev": true }, "cli-columns": { "version": "3.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4=", "dev": true, "requires": { "string-width": "2.1.1", @@ -5909,7 +6046,8 @@ }, "cli-table3": { "version": "0.5.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-c7YHpUyO1SaKaO7kYtxd5NZ8FjAmSK3LpKkuzdwn+2CwpFxBpdoQLm+OAnnCfoEl7onKhN9PKQi1lsHuAIUqGQ==", "dev": true, "requires": { "colors": "1.1.2", @@ -5919,7 +6057,8 @@ }, "cliui": { "version": "4.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { "string-width": "2.1.1", @@ -5929,12 +6068,14 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "strip-ansi": { "version": "4.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "3.0.0" @@ -5944,12 +6085,14 @@ }, "clone": { "version": "1.0.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, "cmd-shim": { "version": "2.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=", "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -5958,17 +6101,20 @@ }, "co": { "version": "4.6.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "color-convert": { "version": "1.9.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { "color-name": "1.1.3" @@ -5976,18 +6122,21 @@ }, "color-name": { "version": "1.1.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "colors": { "version": "1.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true, "optional": true }, "columnify": { "version": "1.5.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", "dev": true, "requires": { "strip-ansi": "3.0.1", @@ -5996,7 +6145,8 @@ }, "combined-stream": { "version": "1.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { "delayed-stream": "1.0.0" @@ -6004,12 +6154,14 @@ }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "concat-stream": { "version": "1.6.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { "buffer-from": "1.0.0", @@ -6020,7 +6172,8 @@ }, "config-chain": { "version": "1.1.11", - "bundled": true, + "resolved": false, + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", "dev": true, "requires": { "ini": "1.3.5", @@ -6029,7 +6182,8 @@ }, "configstore": { "version": "3.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "dev": true, "requires": { "dot-prop": "4.2.0", @@ -6042,12 +6196,14 @@ }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "copy-concurrently": { "version": "1.0.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { "aproba": "1.2.0", @@ -6060,19 +6216,22 @@ "dependencies": { "iferr": { "version": "0.1.5", - "bundled": true, + "resolved": false, + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true } } }, "core-util-is": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "create-error-class": { "version": "3.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "requires": { "capture-stack-trace": "1.0.0" @@ -6080,7 +6239,8 @@ }, "cross-spawn": { "version": "5.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { "lru-cache": "4.1.3", @@ -6090,17 +6250,20 @@ }, "crypto-random-string": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "dev": true }, "cyclist": { "version": "0.2.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, "dashdash": { "version": "1.14.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { "assert-plus": "1.0.0" @@ -6108,7 +6271,8 @@ }, "debug": { "version": "3.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { "ms": "2.0.0" @@ -6116,34 +6280,40 @@ "dependencies": { "ms": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "debuglog": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", "dev": true }, "decamelize": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "decode-uri-component": { "version": "0.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, "deep-extend": { "version": "0.5.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", "dev": true }, "defaults": { "version": "1.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { "clone": "1.0.4" @@ -6151,27 +6321,32 @@ }, "delayed-stream": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, "detect-indent": { "version": "5.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", "dev": true }, "detect-newline": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", "dev": true }, "dezalgo": { "version": "1.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", "dev": true, "requires": { "asap": "2.0.6", @@ -6180,7 +6355,8 @@ }, "dot-prop": { "version": "4.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "dev": true, "requires": { "is-obj": "1.0.1" @@ -6188,17 +6364,20 @@ }, "dotenv": { "version": "5.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", "dev": true }, "duplexer3": { "version": "0.1.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, "duplexify": { "version": "3.6.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", "dev": true, "requires": { "end-of-stream": "1.4.1", @@ -6209,7 +6388,8 @@ }, "ecc-jsbn": { "version": "0.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "optional": true, "requires": { @@ -6219,12 +6399,14 @@ }, "editor": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=", "dev": true }, "encoding": { "version": "0.1.12", - "bundled": true, + "resolved": false, + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "dev": true, "requires": { "iconv-lite": "0.4.23" @@ -6232,7 +6414,8 @@ }, "end-of-stream": { "version": "1.4.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { "once": "1.4.0" @@ -6240,12 +6423,14 @@ }, "err-code": { "version": "1.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", "dev": true }, "errno": { "version": "0.1.7", - "bundled": true, + "resolved": false, + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { "prr": "1.0.1" @@ -6253,12 +6438,14 @@ }, "es6-promise": { "version": "4.2.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", "dev": true }, "es6-promisify": { "version": "5.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { "es6-promise": "4.2.4" @@ -6266,12 +6453,14 @@ }, "escape-string-regexp": { "version": "1.0.5", - "bundled": true, + "resolved": false, + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "execa": { "version": "0.7.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { "cross-spawn": "5.1.0", @@ -6285,37 +6474,44 @@ }, "extend": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extsprintf": { "version": "1.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, "fast-deep-equal": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "fast-json-stable-stringify": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, "figgy-pudding": { "version": "3.4.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.4.1.tgz", + "integrity": "sha512-j1SAT641cerGuOvoSBoaE9LbSzh1N/E5ufk9oMpOKuyK8MyW3sGg4rh+4qhLmVTEAzipO5XTHYT4gjb6JYLE8g==", "dev": true }, "find-npm-prefix": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA==", "dev": true }, "find-up": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { "locate-path": "2.0.0" @@ -6323,7 +6519,8 @@ }, "flush-write-stream": { "version": "1.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { "inherits": "2.0.3", @@ -6332,12 +6529,14 @@ }, "forever-agent": { "version": "0.6.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, "form-data": { "version": "2.3.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { "asynckit": "0.4.0", @@ -6347,7 +6546,8 @@ }, "from2": { "version": "2.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { "inherits": "2.0.3", @@ -6356,7 +6556,8 @@ }, "fs-minipass": { "version": "1.2.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "requires": { "minipass": "2.3.3" @@ -6364,7 +6565,8 @@ }, "fs-vacuum": { "version": "1.2.10", - "bundled": true, + "resolved": false, + "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -6374,7 +6576,8 @@ }, "fs-write-stream-atomic": { "version": "1.0.10", - "bundled": true, + "resolved": false, + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -6385,19 +6588,22 @@ "dependencies": { "iferr": { "version": "0.1.5", - "bundled": true, + "resolved": false, + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true } } }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "fstream": { "version": "1.0.11", - "bundled": true, + "resolved": false, + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -6408,7 +6614,8 @@ }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { "aproba": "1.2.0", @@ -6423,7 +6630,8 @@ "dependencies": { "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "1.1.0", @@ -6435,12 +6643,14 @@ }, "genfun": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-7RAEHy5KfxsKOEZtF6XD4n3x38E=", "dev": true }, "gentle-fs": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-cEng5+3fuARewXktTEGbwsktcldA+YsnUEaXZwcK/3pjSE1X9ObnTs+/8rYf8s+RnIcQm2D5x3rwpN7Zom8Bew==", "dev": true, "requires": { "aproba": "1.2.0", @@ -6455,24 +6665,28 @@ "dependencies": { "iferr": { "version": "0.1.5", - "bundled": true, + "resolved": false, + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true } } }, "get-caller-file": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true }, "get-stream": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, "getpass": { "version": "0.1.7", - "bundled": true, + "resolved": false, + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { "assert-plus": "1.0.0" @@ -6480,7 +6694,8 @@ }, "glob": { "version": "7.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { "fs.realpath": "1.0.0", @@ -6493,7 +6708,8 @@ }, "global-dirs": { "version": "0.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { "ini": "1.3.5" @@ -6501,7 +6717,8 @@ }, "got": { "version": "6.7.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { "create-error-class": "3.0.2", @@ -6519,17 +6736,20 @@ }, "graceful-fs": { "version": "4.1.11", - "bundled": true, + "resolved": false, + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, "har-schema": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true }, "har-validator": { "version": "5.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "dev": true, "requires": { "ajv": "5.5.2", @@ -6538,27 +6758,32 @@ }, "has-flag": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, "hosted-git-info": { "version": "2.7.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, "http-cache-semantics": { "version": "3.8.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "dev": true }, "http-proxy-agent": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "dev": true, "requires": { "agent-base": "4.2.0", @@ -6567,7 +6792,8 @@ }, "http-signature": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { "assert-plus": "1.0.0", @@ -6577,7 +6803,8 @@ }, "https-proxy-agent": { "version": "2.2.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "dev": true, "requires": { "agent-base": "4.2.0", @@ -6586,7 +6813,8 @@ }, "humanize-ms": { "version": "1.2.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", "dev": true, "requires": { "ms": "2.1.1" @@ -6594,7 +6822,8 @@ }, "iconv-lite": { "version": "0.4.23", - "bundled": true, + "resolved": false, + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { "safer-buffer": "2.1.2" @@ -6602,12 +6831,14 @@ }, "iferr": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg==", "dev": true }, "ignore-walk": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "requires": { "minimatch": "3.0.4" @@ -6615,17 +6846,20 @@ }, "import-lazy": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true }, "imurmurhash": { "version": "0.1.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "1.4.0", @@ -6634,17 +6868,20 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ini": { "version": "1.3.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, "init-package-json": { "version": "1.10.3", - "bundled": true, + "resolved": false, + "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", "dev": true, "requires": { "glob": "7.1.2", @@ -6659,22 +6896,26 @@ }, "invert-kv": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, "ip": { "version": "1.1.5", - "bundled": true, + "resolved": false, + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, "ip-regex": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "dev": true }, "is-builtin-module": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { "builtin-modules": "1.1.1" @@ -6682,7 +6923,8 @@ }, "is-ci": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", "dev": true, "requires": { "ci-info": "1.4.0" @@ -6690,7 +6932,8 @@ }, "is-cidr": { "version": "2.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha512-A578p1dV22TgPXn6NCaDAPj6vJvYsBgAzUrAd28a4oldeXJjWqEUuSZOLIW3im51mazOKsoyVp8NU/OItlWacw==", "dev": true, "requires": { "cidr-regex": "2.0.9" @@ -6698,7 +6941,8 @@ }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "1.0.1" @@ -6706,7 +6950,8 @@ }, "is-installed-globally": { "version": "0.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "dev": true, "requires": { "global-dirs": "0.1.1", @@ -6715,17 +6960,20 @@ }, "is-npm": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", "dev": true }, "is-obj": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, "is-path-inside": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { "path-is-inside": "1.0.2" @@ -6733,73 +6981,87 @@ }, "is-redirect": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", "dev": true }, "is-retry-allowed": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", "dev": true }, "is-stream": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "is-typedarray": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isexe": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isstream": { "version": "0.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, "jsbn": { "version": "0.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true, "optional": true }, "json-parse-better-errors": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { "version": "0.2.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, "json-schema-traverse": { "version": "0.3.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, "json-stringify-safe": { "version": "5.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, "jsonparse": { "version": "1.3.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, "jsprim": { "version": "1.4.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { "assert-plus": "1.0.0", @@ -6810,7 +7072,8 @@ }, "latest-version": { "version": "3.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "requires": { "package-json": "4.0.1" @@ -6818,12 +7081,14 @@ }, "lazy-property": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=", "dev": true }, "lcid": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { "invert-kv": "1.0.0" @@ -6831,7 +7096,8 @@ }, "libcipm": { "version": "2.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/libcipm/-/libcipm-2.0.2.tgz", + "integrity": "sha512-9uZ6/LAflVEijksTRq/RX0e+pGA4mr8tND9Cmk2JMg7j2fFUBrs8PpFX2DOAJR/XoxPzz+5h8bkWmtIYLunKAg==", "dev": true, "requires": { "bin-links": "1.1.2", @@ -6852,7 +7118,8 @@ }, "libnpmhook": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-3qqpfqvBD1712WA6iGe0stkG40WwAeoWcujA6BlC0Be1JArQbqwabnEnZ0CRcD05Tf1fPYJYdCbSfcfedEJCOg==", "dev": true, "requires": { "figgy-pudding": "3.4.1", @@ -6861,7 +7128,8 @@ "dependencies": { "npm-registry-fetch": { "version": "3.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-xBobENeenvjIG8PgQ1dy77AXTI25IbYhmA3DusMIfw/4EL5BaQ5e1V9trkPrqHvyjR3/T0cnH6o0Wt/IzcI5Ag==", "dev": true, "requires": { "bluebird": "3.5.1", @@ -6875,7 +7143,8 @@ }, "libnpx": { "version": "10.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-X28coei8/XRCt15cYStbLBph+KGhFra4VQhRBPuH/HHMkC5dxM8v24RVgUsvODKCrUZ0eTgiTqJp6zbl0sskQQ==", "dev": true, "requires": { "dotenv": "5.0.1", @@ -6890,7 +7159,8 @@ }, "locate-path": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { "p-locate": "2.0.0", @@ -6899,7 +7169,8 @@ }, "lock-verify": { "version": "2.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-QNVwK0EGZBS4R3YQ7F1Ox8p41Po9VGl2QG/2GsuvTbkJZYSsPeWHKMbbH6iZMCHWSMww5nrJroZYnGzI4cePuw==", "dev": true, "requires": { "npm-package-arg": "6.1.0", @@ -6908,7 +7179,8 @@ }, "lockfile": { "version": "1.0.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", "dev": true, "requires": { "signal-exit": "3.0.2" @@ -6916,12 +7188,14 @@ }, "lodash._baseindexof": { "version": "3.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=", "dev": true }, "lodash._baseuniq": { "version": "4.6.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=", "dev": true, "requires": { "lodash._createset": "4.0.3", @@ -6930,17 +7204,20 @@ }, "lodash._bindcallback": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", "dev": true }, "lodash._cacheindexof": { "version": "3.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=", "dev": true }, "lodash._createcache": { "version": "3.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", "dev": true, "requires": { "lodash._getnative": "3.9.1" @@ -6948,52 +7225,62 @@ }, "lodash._createset": { "version": "4.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=", "dev": true }, "lodash._getnative": { "version": "3.9.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", "dev": true }, "lodash._root": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", "dev": true }, "lodash.clonedeep": { "version": "4.5.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, "lodash.restparam": { "version": "3.6.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", "dev": true }, "lodash.union": { "version": "4.6.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", "dev": true }, "lodash.uniq": { "version": "4.5.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, "lodash.without": { "version": "4.4.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=", "dev": true }, "lowercase-keys": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, "lru-cache": { "version": "4.1.3", - "bundled": true, + "resolved": false, + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { "pseudomap": "1.0.2", @@ -7002,7 +7289,8 @@ }, "make-dir": { "version": "1.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { "pify": "3.0.0" @@ -7010,7 +7298,8 @@ }, "make-fetch-happen": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==", "dev": true, "requires": { "agentkeepalive": "3.4.1", @@ -7028,12 +7317,14 @@ }, "meant": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==", "dev": true }, "mem": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { "mimic-fn": "1.2.0" @@ -7041,12 +7332,14 @@ }, "mime-db": { "version": "1.35.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", "dev": true }, "mime-types": { "version": "2.1.19", - "bundled": true, + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "dev": true, "requires": { "mime-db": "1.35.0" @@ -7054,12 +7347,14 @@ }, "mimic-fn": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "1.1.11" @@ -7067,12 +7362,14 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": false, + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, "minipass": { "version": "2.3.3", - "bundled": true, + "resolved": false, + "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", "dev": true, "requires": { "safe-buffer": "5.1.2", @@ -7081,14 +7378,16 @@ "dependencies": { "yallist": { "version": "3.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", "dev": true } } }, "minizlib": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "dev": true, "requires": { "minipass": "2.3.3" @@ -7096,7 +7395,8 @@ }, "mississippi": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { "concat-stream": "1.6.2", @@ -7113,7 +7413,8 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" @@ -7121,7 +7422,8 @@ }, "move-concurrently": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { "aproba": "1.2.0", @@ -7134,17 +7436,20 @@ }, "ms": { "version": "2.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, "mute-stream": { "version": "0.0.7", - "bundled": true, + "resolved": false, + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, "node-fetch-npm": { "version": "2.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", "dev": true, "requires": { "encoding": "0.1.12", @@ -7154,7 +7459,8 @@ }, "node-gyp": { "version": "3.8.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", "dev": true, "requires": { "fstream": "1.0.11", @@ -7173,7 +7479,8 @@ "dependencies": { "nopt": { "version": "3.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { "abbrev": "1.1.1" @@ -7181,12 +7488,14 @@ }, "semver": { "version": "5.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true }, "tar": { "version": "2.2.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { "block-stream": "0.0.9", @@ -7198,7 +7507,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "requires": { "abbrev": "1.1.1", @@ -7207,7 +7517,8 @@ }, "normalize-package-data": { "version": "2.4.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { "hosted-git-info": "2.7.1", @@ -7218,7 +7529,8 @@ }, "npm-audit-report": { "version": "1.3.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-SjTF8ZP4rOu3JiFrTMi4M1CmVo2tni2sP4TzhyCMHwnMGf6XkdGLZKt9cdZ12esKf0mbQqFyU9LtY0SoeahL7g==", "dev": true, "requires": { "cli-table3": "0.5.0", @@ -7227,17 +7539,20 @@ }, "npm-bundled": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", + "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", "dev": true }, "npm-cache-filename": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=", "dev": true }, "npm-install-checks": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc=", "dev": true, "requires": { "semver": "5.5.0" @@ -7245,7 +7560,8 @@ }, "npm-lifecycle": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz", + "integrity": "sha512-QbBfLlGBKsktwBZLj6AviHC6Q9Y3R/AY4a2PYSIRhSKSS0/CxRyD/PfxEX6tPeOCXQgMSNdwGeECacstgptc+g==", "dev": true, "requires": { "byline": "5.0.0", @@ -7260,12 +7576,14 @@ }, "npm-logical-tree": { "version": "1.2.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg==", "dev": true }, "npm-package-arg": { "version": "6.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", "dev": true, "requires": { "hosted-git-info": "2.7.1", @@ -7276,7 +7594,8 @@ }, "npm-packlist": { "version": "1.1.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz", + "integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==", "dev": true, "requires": { "ignore-walk": "3.0.1", @@ -7285,7 +7604,8 @@ }, "npm-pick-manifest": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-q9zLP8cTr8xKPmMZN3naxp1k/NxVFsjxN6uWuO1tiw9gxg7wZWQ/b5UTfzD0ANw2q1lQxdLKTeCCksq+bPSgbQ==", "dev": true, "requires": { "npm-package-arg": "6.1.0", @@ -7294,7 +7614,8 @@ }, "npm-profile": { "version": "3.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-rEJOFR6PbwOvvhGa2YTNOJQKNuc6RovJ6T50xPU7pS9h/zKPNCJ+VHZY2OFXyZvEi+UQYtHRTp8O/YM3tUD20A==", "dev": true, "requires": { "aproba": "1.2.0", @@ -7303,7 +7624,8 @@ }, "npm-registry-client": { "version": "8.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.6.0.tgz", + "integrity": "sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==", "dev": true, "requires": { "concat-stream": "1.6.2", @@ -7322,12 +7644,14 @@ "dependencies": { "retry": { "version": "0.10.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", "dev": true }, "ssri": { "version": "5.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { "safe-buffer": "5.1.2" @@ -7337,7 +7661,8 @@ }, "npm-registry-fetch": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-XJPIBfMtgaooRtZmuA42xCeLf3tkxdIX0xqRsGWwNrcVvJ9UYFccD7Ho7QWCzvkM3i/QrkUC37Hu0a+vDBmt5g==", "dev": true, "requires": { "bluebird": "3.5.1", @@ -7350,7 +7675,8 @@ "dependencies": { "cacache": { "version": "10.0.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { "bluebird": "3.5.1", @@ -7370,7 +7696,8 @@ "dependencies": { "mississippi": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { "concat-stream": "1.6.2", @@ -7389,12 +7716,14 @@ }, "figgy-pudding": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-yIJPhIBi/oFdU/P+GSXjmk/rmGjuZkm7A5LTXZxNrEprXJXRK012FiI1BR1Pga+0d/d6taWWD+B5d2ozqaxHig==", "dev": true }, "make-fetch-happen": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-FmWY7gC0mL6Z4N86vE14+m719JKE4H0A+pyiOH18B025gF/C113pyfb4gHDDYP5cqnRMHOz06JGdmffC/SES+w==", "dev": true, "requires": { "agentkeepalive": "3.4.1", @@ -7412,7 +7741,8 @@ }, "pump": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { "end-of-stream": "1.4.1", @@ -7421,12 +7751,14 @@ }, "smart-buffer": { "version": "1.1.15", - "bundled": true, + "resolved": false, + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", "dev": true }, "socks": { "version": "1.1.10", - "bundled": true, + "resolved": false, + "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", "dev": true, "requires": { "ip": "1.1.5", @@ -7435,7 +7767,8 @@ }, "socks-proxy-agent": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", "dev": true, "requires": { "agent-base": "4.2.0", @@ -7444,7 +7777,8 @@ }, "ssri": { "version": "5.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { "safe-buffer": "5.1.2" @@ -7454,7 +7788,8 @@ }, "npm-run-path": { "version": "2.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { "path-key": "2.0.1" @@ -7462,12 +7797,14 @@ }, "npm-user-validate": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=", "dev": true }, "npmlog": { "version": "4.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { "are-we-there-yet": "1.1.4", @@ -7478,22 +7815,26 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "oauth-sign": { "version": "0.9.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1.0.2" @@ -7501,17 +7842,20 @@ }, "opener": { "version": "1.5.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.0.tgz", + "integrity": "sha512-MD4s/o61y2slS27zm2s4229V2gAUHX0/e3/XOmY/jsXwhysjjCIHN8lx7gqZCrZk19ym+HjCUWHeMKD7YJtKCQ==", "dev": true }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "os-locale": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { "execa": "0.7.0", @@ -7521,12 +7865,14 @@ }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, "osenv": { "version": "0.1.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { "os-homedir": "1.0.2", @@ -7535,12 +7881,14 @@ }, "p-finally": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, "p-limit": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { "p-try": "1.0.0" @@ -7548,7 +7896,8 @@ }, "p-locate": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { "p-limit": "1.2.0" @@ -7556,12 +7905,14 @@ }, "p-try": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "package-json": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "dev": true, "requires": { "got": "6.7.1", @@ -7572,7 +7923,8 @@ }, "pacote": { "version": "8.1.6", - "bundled": true, + "resolved": false, + "integrity": "sha512-wTOOfpaAQNEQNtPEx92x9Y9kRWVu45v583XT8x2oEV2xRB74+xdqMZIeGW4uFvAyZdmSBtye+wKdyyLaT8pcmw==", "dev": true, "requires": { "bluebird": "3.5.1", @@ -7604,7 +7956,8 @@ }, "parallel-transform": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { "cyclist": "0.2.2", @@ -7614,52 +7967,62 @@ }, "path-exists": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-is-inside": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, "path-key": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "performance-now": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, "pify": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "prepend-http": { "version": "1.0.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, "process-nextick-args": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, "promise-inflight": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, "promise-retry": { "version": "1.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", "dev": true, "requires": { "err-code": "1.1.2", @@ -7668,14 +8031,16 @@ "dependencies": { "retry": { "version": "0.10.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", "dev": true } } }, "promzard": { "version": "0.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", "dev": true, "requires": { "read": "1.0.7" @@ -7683,12 +8048,14 @@ }, "proto-list": { "version": "1.2.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, "protoduck": { "version": "5.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-agsGWD8/RZrS4ga6v82Fxb0RHIS2RZnbsSue6A9/MBRhB/jcqOANAMNrqM9900b8duj+Gx+T/JMy5IowDoO/hQ==", "dev": true, "requires": { "genfun": "4.0.1" @@ -7696,22 +8063,26 @@ }, "prr": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, "pseudomap": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, "psl": { "version": "1.1.29", - "bundled": true, + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", "dev": true }, "pump": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "1.4.1", @@ -7720,7 +8091,8 @@ }, "pumpify": { "version": "1.5.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { "duplexify": "3.6.0", @@ -7730,7 +8102,8 @@ "dependencies": { "pump": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { "end-of-stream": "1.4.1", @@ -7741,22 +8114,26 @@ }, "punycode": { "version": "1.4.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "qrcode-terminal": { "version": "0.12.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", "dev": true }, "qs": { "version": "6.5.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, "query-string": { "version": "6.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-pNB/Gr8SA8ff8KpUFM36o/WFAlthgaThka5bV19AD9PNTH20Pwq5Zxodif2YyHwrctp6SkL4GqlOot0qR/wGaw==", "dev": true, "requires": { "decode-uri-component": "0.2.0", @@ -7765,12 +8142,14 @@ }, "qw": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-77/cdA+a0FQwRCassYNBLMi5ltQ=", "dev": true }, "rc": { "version": "1.2.7", - "bundled": true, + "resolved": false, + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", "dev": true, "requires": { "deep-extend": "0.5.1", @@ -7781,14 +8160,16 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, "read": { "version": "1.0.7", - "bundled": true, + "resolved": false, + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "dev": true, "requires": { "mute-stream": "0.0.7" @@ -7796,7 +8177,8 @@ }, "read-cmd-shim": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=", "dev": true, "requires": { "graceful-fs": "4.1.11" @@ -7804,7 +8186,8 @@ }, "read-installed": { "version": "4.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", "dev": true, "requires": { "debuglog": "1.0.1", @@ -7818,7 +8201,8 @@ }, "read-package-json": { "version": "2.0.13", - "bundled": true, + "resolved": false, + "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", "dev": true, "requires": { "glob": "7.1.2", @@ -7830,7 +8214,8 @@ }, "read-package-tree": { "version": "5.2.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-2CNoRoh95LxY47LvqrehIAfUVda2JbuFE/HaGYs42bNrGG+ojbw1h3zOcPcQ+1GQ3+rkzNndZn85u1XyZ3UsIA==", "dev": true, "requires": { "debuglog": "1.0.1", @@ -7842,7 +8227,8 @@ }, "readable-stream": { "version": "2.3.6", - "bundled": true, + "resolved": false, + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { "core-util-is": "1.0.2", @@ -7856,7 +8242,8 @@ }, "readdir-scoped-modules": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", "dev": true, "requires": { "debuglog": "1.0.1", @@ -7867,7 +8254,8 @@ }, "registry-auth-token": { "version": "3.3.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", "dev": true, "requires": { "rc": "1.2.7", @@ -7876,7 +8264,8 @@ }, "registry-url": { "version": "3.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "requires": { "rc": "1.2.7" @@ -7884,7 +8273,8 @@ }, "request": { "version": "2.88.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { "aws-sign2": "0.7.0", @@ -7911,27 +8301,32 @@ }, "require-directory": { "version": "2.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, "resolve-from": { "version": "4.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "retry": { "version": "0.12.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, "rimraf": { "version": "2.6.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { "glob": "7.1.2" @@ -7939,7 +8334,8 @@ }, "run-queue": { "version": "1.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { "aproba": "1.2.0" @@ -7947,22 +8343,26 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "semver": { "version": "5.5.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true }, "semver-diff": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, "requires": { "semver": "5.5.0" @@ -7970,12 +8370,14 @@ }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "sha": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-YDCCL70smCOUn49y7WQR7lzyWq4=", "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -7984,7 +8386,8 @@ }, "shebang-command": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { "shebang-regex": "1.0.0" @@ -7992,32 +8395,38 @@ }, "shebang-regex": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "slash": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, "slide": { "version": "1.1.6", - "bundled": true, + "resolved": false, + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true }, "smart-buffer": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==", "dev": true }, "socks": { "version": "2.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-uRKV9uXQ9ytMbGm2+DilS1jB7N3AC0mmusmW5TVWjNuBZjxS8+lX38fasKVY9I4opv/bY/iqTbcpFFaTwpfwRg==", "dev": true, "requires": { "ip": "1.1.5", @@ -8026,7 +8435,8 @@ }, "socks-proxy-agent": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", "dev": true, "requires": { "agent-base": "4.2.0", @@ -8035,12 +8445,14 @@ }, "sorted-object": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=", "dev": true }, "sorted-union-stream": { "version": "2.1.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=", "dev": true, "requires": { "from2": "1.3.0", @@ -8049,7 +8461,8 @@ "dependencies": { "from2": { "version": "1.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=", "dev": true, "requires": { "inherits": "2.0.3", @@ -8058,12 +8471,14 @@ }, "isarray": { "version": "0.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "readable-stream": { "version": "1.1.14", - "bundled": true, + "resolved": false, + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { "core-util-is": "1.0.2", @@ -8074,14 +8489,16 @@ }, "string_decoder": { "version": "0.10.31", - "bundled": true, + "resolved": false, + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } } }, "spdx-correct": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { "spdx-expression-parse": "3.0.0", @@ -8090,12 +8507,14 @@ }, "spdx-exceptions": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "dev": true }, "spdx-expression-parse": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { "spdx-exceptions": "2.1.0", @@ -8104,12 +8523,14 @@ }, "spdx-license-ids": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, "sshpk": { "version": "1.14.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "dev": true, "requires": { "asn1": "0.2.4", @@ -8125,12 +8546,14 @@ }, "ssri": { "version": "6.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-zYOGfVHPhxyzwi8MdtdNyxv3IynWCIM4jYReR48lqu0VngxgH1c+C6CmipRdJ55eVByTJV/gboFEEI7TEQI8DA==", "dev": true }, "stream-each": { "version": "1.2.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", "dev": true, "requires": { "end-of-stream": "1.4.1", @@ -8139,7 +8562,8 @@ }, "stream-iterate": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=", "dev": true, "requires": { "readable-stream": "2.3.6", @@ -8148,17 +8572,20 @@ }, "stream-shift": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, "strict-uri-encode": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", "dev": true }, "string-width": { "version": "2.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", @@ -8167,17 +8594,20 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "strip-ansi": { "version": "4.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "3.0.0" @@ -8187,7 +8617,8 @@ }, "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "5.1.2" @@ -8195,12 +8626,14 @@ }, "stringify-package": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==", "dev": true }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "2.1.1" @@ -8208,17 +8641,20 @@ }, "strip-eof": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "supports-color": { "version": "5.4.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8226,7 +8662,8 @@ }, "tar": { "version": "4.4.6", - "bundled": true, + "resolved": false, + "integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==", "dev": true, "requires": { "chownr": "1.0.1", @@ -8240,14 +8677,16 @@ "dependencies": { "yallist": { "version": "3.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", "dev": true } } }, "term-size": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "requires": { "execa": "0.7.0" @@ -8255,17 +8694,20 @@ }, "text-table": { "version": "0.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "through": { "version": "2.3.8", - "bundled": true, + "resolved": false, + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { "version": "2.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { "readable-stream": "2.3.6", @@ -8274,17 +8716,20 @@ }, "timed-out": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true }, "tiny-relative-date": { "version": "1.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==", "dev": true }, "tough-cookie": { "version": "2.4.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { "psl": "1.1.29", @@ -8293,7 +8738,8 @@ }, "tunnel-agent": { "version": "0.6.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { "safe-buffer": "5.1.2" @@ -8301,28 +8747,33 @@ }, "tweetnacl": { "version": "0.14.5", - "bundled": true, + "resolved": false, + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true, "optional": true }, "typedarray": { "version": "0.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, "uid-number": { "version": "0.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", "dev": true }, "umask": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", "dev": true }, "unique-filename": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", "dev": true, "requires": { "unique-slug": "2.0.0" @@ -8330,7 +8781,8 @@ }, "unique-slug": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "dev": true, "requires": { "imurmurhash": "0.1.4" @@ -8338,7 +8790,8 @@ }, "unique-string": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "dev": true, "requires": { "crypto-random-string": "1.0.0" @@ -8346,17 +8799,20 @@ }, "unpipe": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, "unzip-response": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", "dev": true }, "update-notifier": { "version": "2.5.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", "dev": true, "requires": { "boxen": "1.3.0", @@ -8373,7 +8829,8 @@ }, "url-parse-lax": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { "prepend-http": "1.0.4" @@ -8381,22 +8838,26 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "util-extend": { "version": "1.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=", "dev": true }, "uuid": { "version": "3.3.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "3.0.0", @@ -8405,7 +8866,8 @@ }, "validate-npm-package-name": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, "requires": { "builtins": "1.0.3" @@ -8413,7 +8875,8 @@ }, "verror": { "version": "1.10.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { "assert-plus": "1.0.0", @@ -8423,7 +8886,8 @@ }, "wcwidth": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "requires": { "defaults": "1.0.3" @@ -8431,7 +8895,8 @@ }, "which": { "version": "1.3.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "2.0.0" @@ -8439,12 +8904,14 @@ }, "which-module": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wide-align": { "version": "1.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "requires": { "string-width": "1.0.2" @@ -8452,7 +8919,8 @@ "dependencies": { "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "1.1.0", @@ -8464,7 +8932,8 @@ }, "widest-line": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", "dev": true, "requires": { "string-width": "2.1.1" @@ -8472,7 +8941,8 @@ }, "worker-farm": { "version": "1.6.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { "errno": "0.1.7" @@ -8480,7 +8950,8 @@ }, "wrap-ansi": { "version": "2.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { "string-width": "1.0.2", @@ -8489,7 +8960,8 @@ "dependencies": { "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "1.1.0", @@ -8501,12 +8973,14 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write-file-atomic": { "version": "2.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -8516,27 +8990,32 @@ }, "xdg-basedir": { "version": "3.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, "xtend": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, "y18n": { "version": "4.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yallist": { "version": "2.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "yargs": { "version": "11.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", "dev": true, "requires": { "cliui": "4.1.0", @@ -8555,14 +9034,16 @@ "dependencies": { "y18n": { "version": "3.2.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true } } }, "yargs-parser": { "version": "9.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { "camelcase": "4.1.0" @@ -8594,7 +9075,8 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, "object-assign": { "version": "4.1.1", @@ -8681,7 +9163,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1.0.2" } @@ -8787,6 +9268,11 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "p-cancelable": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.5.1.tgz", + "integrity": "sha512-vkOBXQgQb03QTOoMeeB5/uS2W3iafXzQLaIh7ChHjEb8DDT06sWJizhdOACL1Sittl5dFqsyumJ4rD1WUF8Isw==" + }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -8894,15 +9380,6 @@ } } }, - "parse-headers": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", - "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", - "requires": { - "for-each": "0.3.3", - "trim": "0.0.1" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -8913,12 +9390,14 @@ "json-parse-better-errors": "1.0.2" } }, - "parse-link-header": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-1.0.1.tgz", - "integrity": "sha1-vt/g0hGK64S+deewJUGeyKYRQKc=", + "parse-url": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-1.3.11.tgz", + "integrity": "sha1-V8FUKKuKiSsfQ4aWRccR0OFEtVQ=", + "dev": true, "requires": { - "xtend": "4.0.1" + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" } }, "parse5": { @@ -8975,7 +9454,8 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true }, "pify": { "version": "3.0.0", @@ -9107,12 +9587,23 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.3.tgz", + "integrity": "sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg==", + "dev": true + }, "pretty-format": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", @@ -9137,11 +9628,6 @@ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -9158,6 +9644,12 @@ "sisteransi": "0.1.1" } }, + "protocols": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.6.tgz", + "integrity": "sha1-+LsmPqG1/Xp2BNJri+Ob13Z4v4o=", + "dev": true + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -9167,13 +9659,13 @@ "psl": { "version": "1.1.29", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "dev": true }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "1.4.1", "once": "1.4.0" @@ -9182,7 +9674,8 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true }, "q": { "version": "1.5.1", @@ -9193,7 +9686,17 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "query-string": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.2.0.tgz", + "integrity": "sha512-5wupExkIt8RYL4h/FE+WTg3JHk62e6fFPWtAZA9J5IWK1PfTfKkMS93HBUHcFpeYi9KsY5pFbh+ldvEyaz5MyA==", + "requires": { + "decode-uri-component": "^0.2.0", + "strict-uri-encode": "^2.0.0" + } }, "quick-lru": { "version": "1.1.0", @@ -9220,6 +9723,21 @@ } } }, + "randomstring": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.1.5.tgz", + "integrity": "sha1-bfBij3XL1ZMpMNn+OrTpVqGFGMM=", + "requires": { + "array-uniq": "1.0.2" + }, + "dependencies": { + "array-uniq": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.2.tgz", + "integrity": "sha1-X8w3OSB3VyPP1k1lxkvvU7+eum0=" + } + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -9417,6 +9935,7 @@ "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, "requires": { "aws-sign2": "0.7.0", "aws4": "1.8.0", @@ -9440,21 +9959,11 @@ "uuid": "3.3.2" } }, - "request-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz", - "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", - "requires": { - "bluebird": "3.5.1", - "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.4.3" - } - }, "request-promise-core": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, "requires": { "lodash": "4.17.10" } @@ -9509,6 +10018,14 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -9536,6 +10053,237 @@ "glob": "7.1.2" } }, + "rollup": { + "version": "0.66.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.66.6.tgz", + "integrity": "sha512-J7/SWanrcb83vfIHqa8+aVVGzy457GcjA6GVZEnD0x2u4OnOd0Q1pCrEoNe8yLwM6z6LZP02zBT2uW0yh5TqOw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "@types/node": "*" + } + }, + "rollup-plugin-analyzer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-analyzer/-/rollup-plugin-analyzer-2.1.0.tgz", + "integrity": "sha512-lryo+3+O6/QF2uoDfszbg+YHuKD1OBuUfcd6kjsbZPKho0ksKCTDStFKrbBH6bF1Rpx/F2jdH6gvDsNbYaEK6g==", + "dev": true + }, + "rollup-plugin-commonjs": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz", + "integrity": "sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "magic-string": "^0.25.1", + "resolve": "^1.8.1", + "rollup-pluginutils": "^2.3.3" + }, + "dependencies": { + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + } + } + }, + "rollup-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz", + "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.3.1" + } + }, + "rollup-plugin-node-resolve": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz", + "integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==", + "dev": true, + "requires": { + "builtin-modules": "^2.0.0", + "is-module": "^1.0.0", + "resolve": "^1.1.6" + }, + "dependencies": { + "builtin-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", + "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", + "dev": true + } + } + }, + "rollup-plugin-terser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-3.0.0.tgz", + "integrity": "sha512-Ed9zRD7OoCBnh0XGlEAJle5TCUsFXMLClwKzZWnS1zbNO4MelHjfCSdFZxCAdH70M40nhZ1nRrY2GZQJhSMcjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "jest-worker": "^23.2.0", + "serialize-javascript": "^1.5.0", + "terser": "^3.8.2" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + } + } + }, + "rollup-plugin-typescript2": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.17.1.tgz", + "integrity": "sha512-WZJ220IID2UJm3P15zIWQR6vi6YekRsL4irXYq/C9JHg+j9rqQOsihzXQM644LMgtwS3NUWKegbCOhUlCO7hKQ==", + "dev": true, + "requires": { + "fs-extra": "7.0.0", + "resolve": "1.8.1", + "rollup-pluginutils": "2.3.3", + "tslib": "1.9.3" + }, + "dependencies": { + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + } + } + }, + "rollup-pluginutils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", + "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "micromatch": "^2.3.11" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + } + } + }, "rsvp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", @@ -9551,7 +10299,8 @@ "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==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safe-regex": { "version": "1.1.0", @@ -9565,7 +10314,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sane": { "version": "2.5.2", @@ -9591,37 +10341,38 @@ "dev": true }, "semantic-release": { - "version": "15.10.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-15.10.7.tgz", - "integrity": "sha512-tG94NSTecmpQoxUmJZM5ymp3R2CT+26WoQhS5cnXz/QPNTooJBnkXGvKK6Vrgg9nrPRtsylSQDBWvZ0fPWjfew==", - "dev": true, - "requires": { - "@semantic-release/commit-analyzer": "6.1.0", - "@semantic-release/error": "2.2.0", - "@semantic-release/github": "5.2.1", - "@semantic-release/npm": "5.0.5", - "@semantic-release/release-notes-generator": "7.1.3", - "aggregate-error": "1.0.0", - "cosmiconfig": "5.0.6", - "debug": "4.1.0", - "env-ci": "3.1.0", - "execa": "1.0.0", - "figures": "2.0.0", - "find-versions": "2.0.0", - "get-stream": "4.1.0", - "git-log-parser": "1.2.0", - "hook-std": "1.1.0", - "hosted-git-info": "2.7.1", - "lodash": "4.17.10", - "marked": "0.5.1", - "marked-terminal": "3.1.1", - "p-locate": "3.0.0", - "p-reduce": "1.0.0", - "read-pkg-up": "4.0.0", - "resolve-from": "4.0.0", - "semver": "5.5.0", - "signale": "1.3.0", - "yargs": "12.0.2" + "version": "15.10.3", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-15.10.3.tgz", + "integrity": "sha512-HnN11TvAuvK8vwQOhk/qXJaI4a4f7TisBo90YsZkoCF5GYwQSOhk5hFcuDUs1p+/Wq1rkR3ogICQosnMPw12/g==", + "dev": true, + "requires": { + "@semantic-release/commit-analyzer": "^6.1.0", + "@semantic-release/error": "^2.2.0", + "@semantic-release/github": "^5.1.0", + "@semantic-release/npm": "^5.0.5", + "@semantic-release/release-notes-generator": "^7.1.0", + "aggregate-error": "^1.0.0", + "cosmiconfig": "^5.0.1", + "debug": "^4.0.0", + "env-ci": "^3.0.0", + "execa": "^1.0.0", + "figures": "^2.0.0", + "find-versions": "^2.0.0", + "get-stream": "^4.0.0", + "git-log-parser": "^1.2.0", + "git-url-parse": "^10.0.1", + "hook-std": "^1.1.0", + "hosted-git-info": "^2.7.1", + "lodash": "^4.17.4", + "marked": "^0.5.0", + "marked-terminal": "^3.0.0", + "p-locate": "^3.0.0", + "p-reduce": "^1.0.0", + "read-pkg-up": "^4.0.0", + "resolve-from": "^4.0.0", + "semver": "^5.4.1", + "signale": "^1.2.1", + "yargs": "^12.0.0" }, "dependencies": { "decamelize": { @@ -9802,6 +10553,12 @@ "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", "dev": true }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "dev": true + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -10037,6 +10794,12 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "sourcemap-codec": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.3.tgz", + "integrity": "sha512-vFrY/x/NdsD7Yc8mpTJXuao9S8lq08Z/kOITHz6b7YbfI9xL8Spe5EvSQUHOI7SbpY8bRPr0U3kKSsPuqEGSfA==", + "dev": true + }, "spawn-error-forwarder": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", @@ -10112,6 +10875,7 @@ "version": "1.14.2", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, "requires": { "asn1": "0.2.4", "assert-plus": "1.0.0", @@ -10154,7 +10918,8 @@ "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true }, "stream-combiner2": { "version": "1.1.1", @@ -10166,6 +10931,11 @@ "readable-stream": "2.3.6" } }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" + }, "string-length": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", @@ -10270,12 +11040,46 @@ "has-flag": "3.0.0" } }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, "symbol-tree": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", "dev": true }, + "terser": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.1.tgz", + "integrity": "sha512-GE0ShECt1/dZUZt9Kyr/IC6xXG46pTbm1C1WfzQbbnRB5LhdJlF8p5NBZ38RjspD7hEM9O5ud8aIcOFY6evl4A==", + "dev": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, "test-exclude": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", @@ -10440,6 +11244,11 @@ } } }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", @@ -10466,6 +11275,7 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, "requires": { "psl": "1.1.29", "punycode": "1.4.1" @@ -10494,11 +11304,6 @@ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, "trim-newlines": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", @@ -10601,6 +11406,12 @@ "tslint-microsoft-contrib": "5.2.1" } }, + "tslint-config-prettier": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.15.0.tgz", + "integrity": "sha512-06CgrHJxJmNYVgsmeMoa1KXzQRoOdvfkqnJth6XUkNeOz707qxN0WfxfhYwhL5kXHHbYJRby2bqAPKwThlZPhw==", + "dev": true + }, "tslint-consistent-codestyle": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.13.3.tgz", @@ -10673,6 +11484,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, "requires": { "safe-buffer": "5.1.2" } @@ -10681,6 +11493,7 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, "optional": true }, "type-check": { @@ -10693,9 +11506,9 @@ } }, "typescript": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", - "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.3.tgz", + "integrity": "sha512-+81MUSyX+BaSo+u2RbozuQk/UWx6hfG0a5gHu4ANEM4sU96XbuIyAB+rWBW1u70c6a5QuZfuYICn3s2UjuHUpA==", "dev": true }, "uglify-js": { @@ -10817,7 +11630,16 @@ "url-join": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=" + "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", + "dev": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } }, "url-template": { "version": "2.0.8", @@ -10862,7 +11684,8 @@ "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", @@ -10878,6 +11701,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { "assert-plus": "1.0.0", "core-util-is": "1.0.2", @@ -11024,8 +11848,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "2.3.0", @@ -11047,17 +11870,6 @@ "async-limiter": "1.0.0" } }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "4.3.2", - "is-function": "1.0.1", - "parse-headers": "2.0.1", - "xtend": "4.0.1" - } - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -11073,7 +11885,8 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true }, "y18n": { "version": "3.2.1", diff --git a/package.json b/package.json index 537773448..83fdd6dea 100644 --- a/package.json +++ b/package.json @@ -1,83 +1,93 @@ { "name": "gitlab", - "version": "4.2.7", "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", - "main": "dist/latest/index.js", - "engines": { - "node": ">=8.9.0" - }, - "scripts": { - "prepush": "npm run lint", - "commit": "npx git-cz", - "build:clean": "rimraf -rf dist && mkdirp dist", - "build:es6": "tsc -p tsconfig.dist.json", - "build:es5": "tsc -p tsconfig-es5.dist.json", - "build": "npm run build:clean && npm run build:es6 && npm run build:es5", - "lint": "tslint 'src/**/*.{ts,tsx}' --format stylish --project tsconfig.json", - "test:bundles": "jest test/tests/bundles", - "test:infrastructure": "jest test/tests/infrastructure", - "test:services": "jest test/tests/services", - "test": "jest --debug --runInBand && codecov", - "test-with-token": "PERSONAL_ACCESS_TOKEN=$(docker exec -it gitlab bash -lc 'printf \"%q\" \"${PERSONAL_ACCESS_TOKEN}\"') GITLAB_URL=$(docker exec -it gitlab bash -lc 'printf \"%q\" \"${GITLAB_URL}\"') npm run test", - "prepublishOnly": "npm run build", - "semantic-release": "semantic-release" + "license": "MIT", + "author": { + "email": "justin.s.dalrymple@gmail.com", + "name": "Justin Dalrymple" }, "repository": { "type": "git", "url": "https://github.com/jdalrymple/node-gitlab" }, - "keywords": [ - "gitlab", - "api", - "es6", - "es5", - "request" - ], + "homepage": "https://github.com/jdalrymple/node-gitlab#readme", "bugs": { "url": "https://github.com/jdalrymple/node-gitlab/issues" }, - "author": "Justin Dalrymple ", - "license": "MIT", - "readmeFilename": "README.md", + "version": "5.0.0-rc.1", + "main": "dist/index.js", + "module": "dist/index.es.js", + "browser": { + "dist/index.js": "dist/index.browser.js", + "got": "ky" + }, + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "rollup -c", + "commit": "npx git-cz", + "lint": "tslint 'src/**/*.ts' 'test/**/*.ts' -t stylish", + "format": "prettier", + "prepublishOnly": "npm run build", + "prepush": "npm run lint", + "release": "semantic-release", + "test": "jest --debug --runInBand && codecov", + "test:bundles": "jest test/tests/bundles", + "test:infrastructure": "jest test/tests/infrastructure", + "test:services": "jest test/tests/services" + }, "config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" } }, - "files": [ - "dist" - ], + "dependencies": { + "form-data": "^2.3.3", + "got": "^9.2.2", + "humps": "^2.0.1", + "ky": "^0.4.1", + "query-string": "^6.2.0", + "randomstring": "^1.1.5" + }, "devDependencies": { "@semantic-release/changelog": "^3.0.1", "@semantic-release/git": "^7.0.5", "@semantic-release/npm": "^5.0.5", "@types/humps": "^1.1.2", - "@types/jest": "^23.3.9", - "@types/parse-link-header": "^1.0.0", - "@types/qs": "^6.5.1", - "@types/request-promise": "^4.1.42", - "@types/url-join": "^0.8.2", - "@types/util.promisify": "^1.0.0", + "@types/jest": "^23.3.5", "codecov": "^3.1.0", "cz-conventional-changelog": "^2.1.0", "husky": "^1.1.3", "jest": "^23.6.0", "jest-extended": "^0.11.0", "jest-tap-reporter": "^1.9.0", - "semantic-release": "^15.10.7", + "prettier": "^1.14.3", + "rollup": "^0.66.6", + "rollup-plugin-analyzer": "^2.1.0", + "rollup-plugin-commonjs": "^9.2.0", + "rollup-plugin-json": "^3.1.0", + "rollup-plugin-node-resolve": "^3.4.0", + "rollup-plugin-terser": "^3.0.0", + "rollup-plugin-typescript2": "^0.17.1", + "semantic-release": "^15.10.3", "ts-jest": "^23.10.4", "tslint": "^5.11.0", "tslint-config-airbnb": "^5.11.0", - "typescript": "^3.1.6" + "tslint-config-prettier": "^1.15.0", + "typescript": "^3.1.3" }, - "dependencies": { - "humps": "^2.0.1", - "parse-link-header": "^1.0.1", - "qs": "^6.5.2", - "request": "^2.88.0", - "request-promise": "^4.2.2", - "request-promise-core": "^1.1.1", - "url-join": "^4.0.0", - "xhr": "^2.5.0" + "keywords": [ + "api", + "es5", + "es6", + "gitlab", + "got", + "ky", + "browser" + ], + "engines": { + "node": ">=8.9.0" } } diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 000000000..0b09f0cb1 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,67 @@ +import ts from 'rollup-plugin-typescript2'; +import resolve from 'rollup-plugin-node-resolve'; +import commonjs from 'rollup-plugin-commonjs'; +import json from 'rollup-plugin-json'; +import { terser } from "rollup-plugin-terser"; +import { plugin as analyze } from 'rollup-plugin-analyzer' +import typescript from 'typescript'; +import pkg from './package.json'; + +export default [ + // Browser-friendly UMD build + { + input: 'src/index.ts', + output: { + file: 'dist/index.browser.js', + name: 'node-gitlab', + format: 'umd', + exports: 'named', + globals: { + 'got': 'Request', + 'humps': 'Humps', + 'randomstring': 'RandomString', + 'query-string' : 'QueryString', + 'form-data': 'FormData', + } + }, + external: [...Object.keys(pkg.dependencies)], + plugins: [ + json(), + resolve({ browser: true }), // so Rollup can find `ms` + commonjs(), // so Rollup can convert `ms` to an ES module + ts({ typescript }), + terser(), + analyze() + ], + }, + + // CommonJS (for Node) (for bundlers) build. + { + input: 'src/index.ts', + output: { + file: pkg.main, + format: 'cjs', + }, + external: [...Object.keys(pkg.dependencies)], + plugins: [ + ts({ typescript }), + terser(), + analyze() + ], + }, + + // ES module (for bundlers) build. + { + input: 'src/index.ts', + output: { + file: pkg.module, + format: 'es', + }, + external: [...Object.keys(pkg.dependencies)], + plugins: [ + ts({ typescript }), + terser(), + analyze() + ], + }, +]; diff --git a/src/index.ts b/src/index.ts index c2d233249..222875b84 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,11 @@ +import { bundler } from './infrastructure'; import * as APIServices from './services'; -import { Bundler } from './infrastructure'; // All seperatly export * from './services'; // Groups -export const GroupsBundle = Bundler({ +export const GroupsBundle = bundler({ Groups: APIServices.Groups, GroupAccessRequests: APIServices.GroupAccessRequests, GroupBadges: APIServices.GroupBadges, @@ -22,7 +22,7 @@ export const GroupsBundle = Bundler({ }); // Users -export const UsersBundle = Bundler({ +export const UsersBundle = bundler({ Users: APIServices.Users, UserCustomAttributes: APIServices.UserCustomAttributes, UserEmails: APIServices.UserEmails, @@ -32,7 +32,7 @@ export const UsersBundle = Bundler({ }); // Projects -export const ProjectsBundle = Bundler({ +export const ProjectsBundle = bundler({ Branches: APIServices.Branches, Commits: APIServices.Commits, CommitDiscussions: APIServices.CommitDiscussions, @@ -76,4 +76,4 @@ export const ProjectsBundle = Bundler({ }); // All initialized -export default Bundler(APIServices); +export const Gitlab = bundler(APIServices); diff --git a/src/infrastructure/BaseService.ts b/src/infrastructure/BaseService.ts index 39af0ff3d..20df582dd 100644 --- a/src/infrastructure/BaseService.ts +++ b/src/infrastructure/BaseService.ts @@ -1,41 +1,21 @@ -import URLJoin from 'url-join'; -import Request from 'request-promise'; -import XMLHttpRequester, { XhrStaticPromisified } from './XMLHttpRequester'; +import { BaseServiceOptions } from '@src/types'; -interface BaseModelOptions { - url?: string; - token?: string; - oauthToken?: string; - useXMLHttpRequest?: boolean; - version?: string; - sudo?: string | number; - rejectUnauthorized?: boolean; -} - -export type BaseModelContructorOptions = - | BaseModelOptions & Required> - | BaseModelOptions & Required>; -class BaseModel { - public url: string; +class BaseService { + protected readonly url: string; public readonly headers: { [header: string]: string | number}; public readonly rejectUnauthorized: boolean; - public readonly requester: XhrStaticPromisified; - public readonly useXMLHttpRequest: boolean; constructor({ token, oauthToken, sudo, - url = 'https://gitlab.com', - useXMLHttpRequest = false, + host = 'https://gitlab.com', + url = '', version = 'v4', rejectUnauthorized = true, - }: BaseModelContructorOptions) { - this.url = URLJoin(url, 'api', version); + }: BaseServiceOptions) { + this.url = [host, 'api', version, url].join('/'); this.headers = {}; - this.requester = useXMLHttpRequest - ? XMLHttpRequester : (Request as temporaryAny as XhrStaticPromisified); - this.useXMLHttpRequest = useXMLHttpRequest; this.rejectUnauthorized = rejectUnauthorized; // Handle auth tokens @@ -47,4 +27,4 @@ class BaseModel { } } -export default BaseModel; +export default BaseService; diff --git a/src/infrastructure/Bundler.ts b/src/infrastructure/Bundler.ts deleted file mode 100644 index bc02bcb8d..000000000 --- a/src/infrastructure/Bundler.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { BaseService } from '.'; -import { BaseModelContructorOptions } from './BaseService'; - -function Bundler( - services: T, -): new (baseOptions: BaseModelContructorOptions) => { [K in keyof T]: InstanceType } { - const combined = { ...services as object } as T; - interface BundleClass { - [K: string]: BaseService; - } - return class Bundle implements BundleClass { - [K: string]: any; - constructor(baseOptions: BaseModelContructorOptions) { - Object.keys(combined).forEach((serviceName) => { - this[serviceName] = new combined[serviceName](baseOptions); - }); - } - } as temporaryAny; -} - -export default Bundler; diff --git a/src/infrastructure/RequestHelper.ts b/src/infrastructure/RequestHelper.ts index cb136fc14..47013a00b 100644 --- a/src/infrastructure/RequestHelper.ts +++ b/src/infrastructure/RequestHelper.ts @@ -1,276 +1,96 @@ -import Humps from 'humps'; -import LinkParser from 'parse-link-header'; -import QS from 'qs'; -import URLJoin from 'url-join'; -import StreamableRequest from 'request'; -import { BaseService } from '.'; -import { CommitAction } from '../services/Commits'; - -export interface RequestParametersInput { - url?: string; - headers: import('./BaseService').default['headers']; - json?: boolean; - body?: Object; - qs?: Object; - qsStringifyOptions? : Object; - formData?: temporaryAny; - resolveWithFullResponse?: boolean; - rejectUnauthorized?: boolean; -} - -interface GetPaginatedOptions { - showPagination?: boolean; - maxPages?: number; - perPage?: number; - page?: number; - position?: temporaryAny; +import Request from 'got'; +import { decamelizeKeys } from 'humps'; +import { stringify } from 'query-string'; +import { PaginatedRequestOptions, BaseRequestOptions, DefaultRequestOptions } from '@src/types'; + +function defaultRequest(service, endpoint: string, { body, query, sudo }: DefaultRequestOptions) { + return [ + endpoint, + { + baseUrl: service.url, + headers: { sudo, ...service.headers }, + query: query && stringify(decamelizeKeys(query), { arrayFormat: 'bracket' }), + body: body && decamelizeKeys(body), + rejectUnauthorized: service.rejectUnauthorized, + json: true, + }, + ]; } -type RequestParametersOutput = RequestParametersInput & - Required>; - -export async function wait(ms: number) { - return new Promise(resolve => setTimeout(resolve, ms)); -} +class RequestHelper { + static async get(service, endpoint: string, options: PaginatedRequestOptions = {}) { + const { showPagination, maxPages, sudo, ...query } = options; + const requestOptions = defaultRequest(service, endpoint, { + query, + sudo, + }); + + const { headers, body } = await Request.get(...requestOptions); + const pagination = { + total: headers['x-total'], + next: headers['x-next-page'] || null, + current: headers['x-page'] || null, + previous: headers['x-prev-page'] || null, + perPage: headers['x-per-page'], + totalPages: headers['x-total-pages'], + }; -function defaultRequest( - { url, useXMLHttpRequest, rejectUnauthorized }: BaseService, - endpoint: string, - { headers, body, qs, formData, resolveWithFullResponse = false }: RequestParametersInput, -): RequestParametersOutput { - const params: RequestParametersOutput = { - url: URLJoin(url, endpoint), - headers, - json: true, - }; + const underLimit = maxPages ? pagination.current < maxPages : true; - if (body) params.body = Humps.decamelizeKeys(body); + // If not looking for a singular page and still under the max pages limit + // AND their is a next page, paginate + if (!query.page && underLimit && pagination.next) { + const more = await this.get(service, endpoint, { + page: pagination.next, + ...options, + }); - if (qs) { - if (useXMLHttpRequest) { - // The xhr package doesn't have a way of passing in a qs object until v3 - params.url = URLJoin(params.url, `?${QS.stringify(Humps.decamelizeKeys(qs), { arrayFormat: 'brackets' })}`); - } else { - params.qs = Humps.decamelizeKeys(qs); - params.qsStringifyOptions = { arrayFormat: 'brackets' }; + return [...body, ...more]; } - } - - if (formData) params.formData = formData; - - params.resolveWithFullResponse = resolveWithFullResponse; - - params.rejectUnauthorized = rejectUnauthorized; - - return params; -} - -function getStream(service: BaseService, endpoint: string, options: RequestOptions = {}) { - if (service.useXMLHttpRequest) { - throw new Error( - `Cannot use streaming functionality with XMLHttpRequest. Please instantiate without this - option to use streaming`, - ); - } - - const requestOptions = defaultRequest(service, endpoint, { - headers: service.headers, - qs: options, - }); - - return StreamableRequest.get(requestOptions); -} - -async function getPaginated( - service: BaseService, - endpoint: string, - options: GetPaginatedOptions = {}, -) { - const { showPagination, maxPages, ...queryOptions } = options; - const requestOptions = defaultRequest(service, endpoint, { - headers: service.headers, - qs: queryOptions, - resolveWithFullResponse: true, - }); - - const response = await service.requester.get(requestOptions); - const links = LinkParser(response.headers.link) || {}; - const page = response.headers['x-page']; - const underMaxPageLimit = maxPages ? page < maxPages : true; - let more = []; - let data: temporaryAny; - // If not looking for a singular page and still under the max pages limit - // AND their is a next page, paginate - if (!queryOptions.page && underMaxPageLimit && links.next) { - more = await getPaginated(service, links.next.url.replace(service.url, ''), options); - data = [...response.body, ...more]; - } else { - data = response.body; - } - - if ((queryOptions.page || maxPages) && showPagination) { - return { - data, - pagination: { - total: response.headers['x-total'], - next: response.headers['x-next-page'] || null, - current: response.headers['x-page'] || null, - previous: response.headers['x-prev-page'] || null, - perPage: response.headers['x-per-page'], - totalPages: response.headers['x-total-pages'], - }, - }; + return showPagination ? { data: body, pagination } : body; } - return data; -} - -type RequestType = 'post' | 'get' | 'put' | 'delete'; - -export interface RequestOptions { - targetIssueId?: string; - targetProjectId?: string; - content?: string; - id?: string; - sourceBranch?: string; - targetBranch?: string; - /** The duration in human format. e.g: 3h30m */ - duration?: string; - domain?: string; - cron?: temporaryAny; - description?: string; - file?: { - value: Buffer; - options: { - filename: string; - contentType: 'application/octet-stream'; - }; - }; - path?: string; - namespace?: string; - visibility?: string; - code?: string; - fileName?: string; - from?: string; - to?: string; - sha?: string; - runnerId?: string; - ref?: string; - scope?: string; - url?: string; - scopes?: temporaryAny; - expiresAt?: string; - note?: string; - actions?: CommitAction[]; - commitMessage?: string; - branch?: string; - body?: string | temporaryAny; - title?: string; - name?: string; - labelId?: temporaryAny; - accessLevel?: number; - userId?: UserId; - position?: temporaryAny; - value?: string; - linkUrl?: string; - imageUrl?: string; - key?: string; - action?: string; - targetType?: string; - email?: string; - password?: string; - search?: string; - public?: boolean; - text?: string; -} - -class RequestHelper { - static async request( - type: RequestType, - service: BaseService, - endpoint: string, - options: RequestOptions = {}, - form = false, - stream = false, - ): Promise { - try { - switch (type) { - case 'get': - if (stream) return await getStream(service, endpoint, options); - return await getPaginated(service, endpoint, options); - - case 'post': { - const requestOptions = defaultRequest(service, endpoint, { - headers: service.headers, - [form ? 'formData' : 'body']: options, - }); - - return await service.requester.post(requestOptions); - } - - case 'put': { - const requestOptions = defaultRequest(service, endpoint, { - headers: service.headers, - body: options, - }); - - return await service.requester.put(requestOptions); - } - - case 'delete': { - const requestOptions = defaultRequest(service, endpoint, { - headers: service.headers, - qs: options, - }); - - return await service.requester.delete(requestOptions); - } - - default: - throw new Error(`Unknown request type ${type}`); - } - } catch (err) { - await RequestHelper.handleRequestError(err); - return RequestHelper.request(type, service, endpoint, options, form, stream); - } + static async stream(service, endpoint: string, options: BaseRequestOptions = ({} = {})) { + return Request.stream( + ...defaultRequest(service, endpoint, { + query: options, + }), + ); } - static async handleRequestError(err: temporaryAny) { - if ( - !err.response || - !err.response.headers || - !err.response.headers['retry-after'] || - parseInt(err.statusCode, 10) !== 429 - ) { - throw err; - } - - const sleepTime = parseInt(err.response.headers['retry-after'], 10); + static async post(service, endpoint: string, options: BaseRequestOptions = {}) { + const { sudo, ...body } = options; + const response = await Request.post( + ...defaultRequest(service, endpoint, { + body, + sudo, + }), + ); - if (!sleepTime) throw err; - return wait(sleepTime * 1000); + return response.body; } - static get( - service: BaseService, - endpoint: string, - options: RequestOptions = {}, - { stream = false } = {}, - ) { - return RequestHelper.request('get', service, endpoint, options, false, stream); - } + static async put(service, endpoint: string, options: BaseRequestOptions = {}) { + const { sudo, ...body } = options; + const response = await Request.put( + ...defaultRequest(service, endpoint, { + body, + }), + ); - static post(service: BaseService, endpoint: string, options: RequestOptions = {}, form = false) { - return RequestHelper.request('post', service, endpoint, options, form); + return response.body; } - static put(service: BaseService, endpoint: string, options: RequestOptions = {}) { - return RequestHelper.request('put', service, endpoint, options); - } + static async delete(service, endpoint: string, options: BaseRequestOptions = {}) { + const { sudo, ...query } = options; + const response = await Request.delete( + ...defaultRequest(service, endpoint, { + query, + }), + ); - static delete(service: BaseService, endpoint: string, options: RequestOptions = {}) { - return RequestHelper.request('delete', service, endpoint, options); + return response.body; } } diff --git a/src/infrastructure/Utils.ts b/src/infrastructure/Utils.ts new file mode 100644 index 000000000..2da7688f3 --- /dev/null +++ b/src/infrastructure/Utils.ts @@ -0,0 +1,13 @@ +import { BaseService } from '.'; + +export function bundler(services = {}) { + return class Bundle { + [serviceName: string]: BaseService; + + constructor(options?: any) { + Object.entries(services).forEach(([name, ser]: [string, any]) => { + this[name] = new ser(options); + }); + } + }; +} \ No newline at end of file diff --git a/src/infrastructure/XMLHttpRequester.ts b/src/infrastructure/XMLHttpRequester.ts deleted file mode 100644 index 034979f4b..000000000 --- a/src/infrastructure/XMLHttpRequester.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { StatusCodeError } from 'request-promise-core/errors'; -import { promisify } from 'util'; -import XHR, { XhrUriConfig, XhrUrlConfig } from 'xhr'; -import { wait } from './RequestHelper'; - -export interface XhrInstancePromisified { - (options: XhrUriConfig | XhrUrlConfig): Promise; -} - -export interface XhrStaticPromisified extends XhrInstancePromisified { - del: XhrInstancePromisified; - delete: XhrInstancePromisified; - get: XhrInstancePromisified; - head: XhrInstancePromisified; - patch: XhrInstancePromisified; - post: XhrInstancePromisified; - put: XhrInstancePromisified; -} - -interface XhrConfgExtraParams { - resolveWithFullResponse?: boolean; -} - -function promisifyWithRetry(fn: F): XhrInstancePromisified { - const promisifiedFn = promisify(fn); - - return async function getResponse( - opts: XhrUriConfig & XhrConfgExtraParams | XhrUrlConfig & XhrConfgExtraParams, - ) { - const response = await promisifiedFn(opts); - const sleepTime = parseInt(response.headers['retry-after'], 10); - if (response.statusCode === 429 && sleepTime) { - await wait(sleepTime * 1000); - } else if (response.statusCode >= 400 && response.statusCode <= 599) { - throw new StatusCodeError(response.statusCode, response.body, {}, null); - } - - return opts.resolveWithFullResponse ? response : response.body; - } as XhrInstancePromisified; -} - -const promisifyWithRetryDelete = promisifyWithRetry(XHR.del); -const XMLHttpRequesterPromisifiedExtras = { - del: promisifyWithRetryDelete, - delete: promisifyWithRetryDelete, - get: promisifyWithRetry(XHR.get), - head: promisifyWithRetry(XHR.head), - patch: promisifyWithRetry(XHR.patch), - post: promisifyWithRetry(XHR.post), - put: promisifyWithRetry(XHR.put), -}; - -const XMLHttpRequester: XhrStaticPromisified = Object.assign( - promisifyWithRetry(XHR), - XMLHttpRequesterPromisifiedExtras, -); - -export default XMLHttpRequester; diff --git a/src/infrastructure/index.ts b/src/infrastructure/index.ts index 54c191e3e..255cb2731 100644 --- a/src/infrastructure/index.ts +++ b/src/infrastructure/index.ts @@ -1,3 +1,3 @@ export { default as BaseService } from './BaseService'; export { default as RequestHelper } from './RequestHelper'; -export { default as Bundler } from './Bundler'; +export { bundler } from './Utils'; diff --git a/src/services/ApplicationSettings.ts b/src/services/ApplicationSettings.ts index 310b62cbf..61140697a 100644 --- a/src/services/ApplicationSettings.ts +++ b/src/services/ApplicationSettings.ts @@ -1,12 +1,12 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { BaseRequestOptions, Sudo } from '@src/types'; class ApplicationSettings extends BaseService { - all() { - return RequestHelper.get(this, 'application/settings'); + all(options?: Sudo) { + return RequestHelper.get(this, 'application/settings', options); } - edit(options: RequestOptions) { + edit(options?: BaseRequestOptions) { return RequestHelper.put(this, 'application/settings', options); } } diff --git a/src/services/Branches.ts b/src/services/Branches.ts index 3c4de3cba..a968591a8 100644 --- a/src/services/Branches.ts +++ b/src/services/Branches.ts @@ -1,44 +1,45 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { BaseRequestOptions, PaginatedRequestOptions, Sudo, ProjectId } from '@src/types'; class Branches extends BaseService { - all(projectId: ProjectId, options: RequestOptions) { + all(projectId: ProjectId, options: { search: string } & PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/branches`, options); } - create(projectId: ProjectId, branchName: string, ref: string) { + create(projectId: ProjectId, branchName: string, ref: string, options?: Sudo) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/repository/branches`, { branch: branchName, ref, + ...options }); } - protect(projectId: ProjectId, branchName: string, options: RequestOptions) { + protect(projectId: ProjectId, branchName: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/protected_branches`, { name: branchName, ...options }); } - remove(projectId: ProjectId, branchName: string) { + remove(projectId: ProjectId, branchName: string, options?: Sudo) { const [pId, bName] = [projectId, branchName].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/repository/branches/${bName}`); + return RequestHelper.delete(this, `projects/${pId}/repository/branches/${bName}`, options); } - show(projectId: ProjectId, branchName: string) { + show(projectId: ProjectId, branchName: string, options?: Sudo) { const [pId, bName] = [projectId, branchName].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/repository/branches/${bName}`); + return RequestHelper.get(this, `projects/${pId}/repository/branches/${bName}`, options); } - unprotect(projectId: ProjectId, branchName: string) { + unprotect(projectId: ProjectId, branchName: string, options?: Sudo) { const [pId, bName] = [projectId, branchName].map(encodeURIComponent); - return RequestHelper.put(this, `projects/${pId}/repository/branches/${bName}/unprotect`); + return RequestHelper.put(this, `projects/${pId}/repository/branches/${bName}/unprotect`, options); } } diff --git a/src/services/BroadcastMessages.ts b/src/services/BroadcastMessages.ts index 2073428a6..6f5a60118 100644 --- a/src/services/BroadcastMessages.ts +++ b/src/services/BroadcastMessages.ts @@ -1,18 +1,16 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -export type BroadcastMessageId = string | number; +import { BaseRequestOptions, PaginatedRequestOptions, BroadcastMessageId } from '@src/types'; class BroadcastMessages extends BaseService { - all(options: RequestOptions) { + all(options?: PaginatedRequestOptions) { return RequestHelper.get(this, 'broadcast_messages', options); } - create(options: RequestOptions) { + create(options?: BaseRequestOptions) { return RequestHelper.post(this, 'broadcast_messages', options); } - edit(broadcastMessageId: BroadcastMessageId, options: RequestOptions) { + edit(broadcastMessageId: BroadcastMessageId, options?: BaseRequestOptions) { const bId = encodeURIComponent(broadcastMessageId); return RequestHelper.put(this, `broadcast_messages/${bId}`, options); @@ -24,7 +22,7 @@ class BroadcastMessages extends BaseService { return RequestHelper.delete(this, `broadcast_messages/${bId}`); } - show(broadcastMessageId: BroadcastMessageId, options: RequestOptions) { + show(broadcastMessageId: BroadcastMessageId, options?: BaseRequestOptions) { const bId = encodeURIComponent(broadcastMessageId); return RequestHelper.get(this, `broadcast_messages/${bId}`, options); diff --git a/src/services/CommitDiscussions.ts b/src/services/CommitDiscussions.ts index 014bc92ab..79d8a42bf 100644 --- a/src/services/CommitDiscussions.ts +++ b/src/services/CommitDiscussions.ts @@ -1,9 +1,9 @@ import { ResourceDiscussions } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class CommitDiscussions extends ResourceDiscussions { - constructor(baseParams: BaseModelContructorOptions) { - super('projects', 'commits', baseParams); + constructor(options: BaseServiceOptions) { + super('projects', 'commits', options); } } diff --git a/src/services/Commits.ts b/src/services/Commits.ts index 0587a4dfd..cbc857b35 100644 --- a/src/services/Commits.ts +++ b/src/services/Commits.ts @@ -1,38 +1,32 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -export interface CommitAction { - /** The action to perform */ - action: 'create' | 'delete' | 'move' | 'update'; - /** Full path to the file. Ex. lib/class.rb */ - file_path: string; - /** Original full path to the file being moved.Ex.lib / class1.rb */ - previous_path?: string; - /** File content, required for all except delete. Optional for move */ - content?: string; - /** text or base64. text is default. */ - encoding?: string; - /** Last known file commit id. Will be only considered in update, move and delete actions. */ - last_commit_id?: string; -} +import { + BaseRequestOptions, + PaginatedRequestOptions, + Sudo, + CommitAction, + ProjectId, +} from '@src/types'; class Commits extends BaseService { - all(projectId: ProjectId, options: RequestOptions) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/commits`, options); } - cherryPick(projectId: ProjectId, sha: string, branch: string) { + cherryPick(projectId: ProjectId, sha: string, branch: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.post(this, `projects/${pId}/repository/commits/${sha}/cherry_pick`, { branch }); + return RequestHelper.post(this, `projects/${pId}/repository/commits/${sha}/cherry_pick`, { + branch, + ...options, + }); } - comments(projectId: ProjectId, sha: string) { + comments(projectId: ProjectId, sha: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/comments`); + return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/comments`, options); } create( @@ -40,7 +34,7 @@ class Commits extends BaseService { branch: string, message: string, actions: CommitAction[] = [], - options: RequestOptions, + options?: BaseRequestOptions, ) { const pId = encodeURIComponent(projectId); @@ -52,7 +46,7 @@ class Commits extends BaseService { }); } - createComment(projectId: ProjectId, sha: string, note: string, options: RequestOptions) { + createComment(projectId: ProjectId, sha: string, note: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/repository/commits/${sha}/comments`, { @@ -61,31 +55,31 @@ class Commits extends BaseService { }); } - diff(projectId: ProjectId, sha: string) { + diff(projectId: ProjectId, sha: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/diff`); + return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/diff`, options); } - editStatus(projectId: ProjectId, sha: string, options: RequestOptions) { + editStatus(projectId: ProjectId, sha: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/statuses/${sha}`, options); } - references(projectId: ProjectId, sha: string) { + references(projectId: ProjectId, sha: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/refs`); + return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/refs`, options); } - show(projectId: ProjectId, sha: string, options: RequestOptions) { + show(projectId: ProjectId, sha: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}`, options); } - status(projectId: ProjectId, sha: string, options: RequestOptions) { + status(projectId: ProjectId, sha: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/statuses`, options); diff --git a/src/services/DeployKeys.ts b/src/services/DeployKeys.ts index 325566be1..3be507e84 100644 --- a/src/services/DeployKeys.ts +++ b/src/services/DeployKeys.ts @@ -1,29 +1,29 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, Sudo, ProjectId, KeyId } from '@src/types'; class DeployKeys extends BaseService { - add(projectId: ProjectId, options: RequestOptions) { + add(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/deploy_keys`, options); } - all(projectId: ProjectId) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/deploy_keys`); + return RequestHelper.get(this, `projects/${pId}/deploy_keys`, options); } - show(projectId: ProjectId, keyId: KeyId) { + show(projectId: ProjectId, keyId: KeyId, options?: Sudo) { const [pId, kId] = [projectId, keyId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/deploy_keys/${kId}`); + return RequestHelper.get(this, `projects/${pId}/deploy_keys/${kId}`, options); } - enable(projectId: ProjectId, keyId: KeyId) { + enable(projectId: ProjectId, keyId: KeyId, options?: Sudo) { const [pId, kId] = [projectId, keyId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/deploy_keys/${kId}/enable`); + return RequestHelper.post(this, `projects/${pId}/deploy_keys/${kId}/enable`, options); } } diff --git a/src/services/Deployments.ts b/src/services/Deployments.ts index d3913c7de..6d4144db7 100644 --- a/src/services/Deployments.ts +++ b/src/services/Deployments.ts @@ -1,19 +1,17 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -type DeploymentId = string | number; +import { PaginatedRequestOptions, Sudo, ProjectId, DeploymentId } from '@src/types'; class Deployments extends BaseService { - all(projectId: ProjectId, options: RequestOptions) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/deployments`, options); } - show(projectId: ProjectId, deploymentId: DeploymentId) { + show(projectId: ProjectId, deploymentId: DeploymentId, options?: Sudo) { const [pId, dId] = [projectId, deploymentId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/deployments/${dId}`); + return RequestHelper.post(this, `projects/${pId}/deployments/${dId}`, options); } } diff --git a/src/services/Environments.ts b/src/services/Environments.ts index 3300c3e11..86c71cb68 100644 --- a/src/services/Environments.ts +++ b/src/services/Environments.ts @@ -1,37 +1,41 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -type EnvironmentId = string | number; +import { + BaseRequestOptions, + PaginatedRequestOptions, + Sudo, + ProjectId, + EnvironmentId, +} from '@src/types'; class Environments extends BaseService { - all(projectId: ProjectId, options: RequestOptions) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/environments`, options); } - create(projectId: ProjectId, options: RequestOptions) { + create(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/environments`, options); } - edit(projectId: ProjectId, environmentId: EnvironmentId, options: RequestOptions) { + edit(projectId: ProjectId, environmentId: EnvironmentId, options?: BaseRequestOptions) { const [pId, eId] = [projectId, environmentId].map(encodeURIComponent); return RequestHelper.put(this, `projects/${pId}/environments/${eId}`, options); } - remove(projectId: ProjectId, environmentId: EnvironmentId) { + remove(projectId: ProjectId, environmentId: EnvironmentId, options?: Sudo) { const [pId, eId] = [projectId, environmentId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/environments/${eId}`); + return RequestHelper.delete(this, `projects/${pId}/environments/${eId}`, options); } - stop(projectId: ProjectId, environmentId: EnvironmentId) { + stop(projectId: ProjectId, environmentId: EnvironmentId, options?: Sudo) { const [pId, eId] = [projectId, environmentId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/environments/${eId}/stop`); + return RequestHelper.post(this, `projects/${pId}/environments/${eId}/stop`, options); } } diff --git a/src/services/EpicDiscussions.ts b/src/services/EpicDiscussions.ts index 7b69f314d..b9d8ec1a3 100644 --- a/src/services/EpicDiscussions.ts +++ b/src/services/EpicDiscussions.ts @@ -1,8 +1,8 @@ import { ResourceDiscussions } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class EpicDiscussions extends ResourceDiscussions { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('groups', 'epics', options); } } diff --git a/src/services/EpicIssues.ts b/src/services/EpicIssues.ts index 02828ff73..e937f3b27 100644 --- a/src/services/EpicIssues.ts +++ b/src/services/EpicIssues.ts @@ -1,32 +1,36 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -export type EpicId = string | number; -export type IssueId = string | number; +import { + BaseRequestOptions, + PaginatedRequestOptions, + Sudo, + GroupId, + EpicId, + IssueId, +} from '@src/types'; class EpicIssues extends BaseService { - all(groupId: GroupId, epicId: EpicId) { + all(groupId: GroupId, epicId: EpicId, options?: PaginatedRequestOptions) { const [gId, eId] = [groupId, epicId].map(encodeURIComponent); - return RequestHelper.get(this, `groups/${gId}/epics/${eId}/issues`); + return RequestHelper.get(this, `groups/${gId}/epics/${eId}/issues`, options); } - assign(groupId: GroupId, epicId: EpicId, issueId: IssueId) { + assign(groupId: GroupId, epicId: EpicId, issueId: IssueId, options?: Sudo) { const [gId, eId, iId] = [groupId, epicId, issueId].map(encodeURIComponent); - return RequestHelper.put(this, `groups/${gId}/epics/${eId}/issues/${iId}`); + return RequestHelper.put(this, `groups/${gId}/epics/${eId}/issues/${iId}`, options); } - edit(groupId: GroupId, epicId: EpicId, issueId: IssueId, options: RequestOptions) { + edit(groupId: GroupId, epicId: EpicId, issueId: IssueId, options?: BaseRequestOptions) { const [gId, eId, iId] = [groupId, epicId, issueId].map(encodeURIComponent); return RequestHelper.delete(this, `groups/${gId}/epics/${eId}/issues/${iId}`, options); } - remove(groupId: GroupId, epicId: EpicId, issueId: IssueId) { + remove(groupId: GroupId, epicId: EpicId, issueId: IssueId, options?: Sudo) { const [gId, eId, iId] = [groupId, epicId, issueId].map(encodeURIComponent); - return RequestHelper.delete(this, `groups/${gId}/epics/${eId}/issues/${iId}`); + return RequestHelper.delete(this, `groups/${gId}/epics/${eId}/issues/${iId}`, options); } } diff --git a/src/services/EpicNotes.ts b/src/services/EpicNotes.ts index e3151ace8..7a516808a 100644 --- a/src/services/EpicNotes.ts +++ b/src/services/EpicNotes.ts @@ -1,8 +1,8 @@ import { ResourceNotes } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class EpicNotes extends ResourceNotes { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('groups', 'epics', options); } } diff --git a/src/services/Epics.ts b/src/services/Epics.ts index 7d5b80e97..d54c71599 100644 --- a/src/services/Epics.ts +++ b/src/services/Epics.ts @@ -1,37 +1,35 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -export type EpicId = string | number; +import { BaseRequestOptions, PaginatedRequestOptions, Sudo, GroupId, EpicId } from '@src/types'; class Epics extends BaseService { - all(groupId: GroupId) { + all(groupId: GroupId, options?: PaginatedRequestOptions) { const gId = encodeURIComponent(groupId); - return RequestHelper.get(this, `groups/${gId}/epics`); + return RequestHelper.get(this, `groups/${gId}/epics`, options); } - create(groupId: GroupId, title: string, options: RequestOptions) { + create(groupId: GroupId, title: string, options?: BaseRequestOptions) { const gId = encodeURIComponent(groupId); return RequestHelper.post(this, `groups/${gId}/epics`, { title, ...options }); } - edit(groupId: GroupId, epicId: EpicId, options: RequestOptions) { + edit(groupId: GroupId, epicId: EpicId, options?: BaseRequestOptions) { const [gId, eId] = [groupId, epicId].map(encodeURIComponent); return RequestHelper.put(this, `groups/${gId}/epics/${eId}`, options); } - remove(groupId: GroupId, epicId: EpicId) { + remove(groupId: GroupId, epicId: EpicId, options?: Sudo) { const [gId, eId] = [groupId, epicId].map(encodeURIComponent); - return RequestHelper.delete(this, `groups/${gId}/epics/${eId}`); + return RequestHelper.delete(this, `groups/${gId}/epics/${eId}`, options); } - show(groupId: GroupId, epicId: EpicId) { + show(groupId: GroupId, epicId: EpicId, options?: Sudo) { const [gId, eId] = [groupId, epicId].map(encodeURIComponent); - return RequestHelper.get(this, `groups/${gId}/epics/${eId}`); + return RequestHelper.get(this, `groups/${gId}/epics/${eId}`, options); } } diff --git a/src/services/Events.ts b/src/services/Events.ts index c5a180f20..c9923059b 100644 --- a/src/services/Events.ts +++ b/src/services/Events.ts @@ -1,53 +1,10 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, EventOptions } from '@src/types'; -const ACTION_TYPES = { - created: 'created', - updated: 'updated', - closed: 'closed', - reopened: 'reopened', - pushed: 'pushed', - commented: 'commented', - merged: 'merged', - joined: 'joined', - left: 'left', - destroyed: 'destroyed', - expired: 'expired', -}; - -const TARGET_TYPES = { - issue: 'issue', - milestone: 'milestone', - merge_request: 'merge_request', - note: 'note', - project: 'project', - snippet: 'snippet', - user: 'user', -}; - -function assertEventOptions( - action: keyof typeof ACTION_TYPES, - target: keyof typeof TARGET_TYPES, -) { - if (action && !(action in ACTION_TYPES)) { - throw new Error(`This action is not supported. Pleased use one of following options: ${Object.keys(ACTION_TYPES)}`); - } - - if (target && !(target in TARGET_TYPES)) { - throw new Error(`This target is not supported. Pleased use one of following options: ${Object.keys(TARGET_TYPES)}`); - } -} -export interface EventOptions { - action: keyof typeof ACTION_TYPES; - targetType: keyof typeof TARGET_TYPES; -} class Events extends BaseService { - all(options: RequestOptions & EventOptions) { - assertEventOptions(options.action, options.targetType); - + all(options?: PaginatedRequestOptions & EventOptions) { return RequestHelper.get(this, 'events', options); } } export default Events; -export { assertEventOptions }; diff --git a/src/services/FeatureFlags.ts b/src/services/FeatureFlags.ts index 91a89cd92..b1e76906f 100644 --- a/src/services/FeatureFlags.ts +++ b/src/services/FeatureFlags.ts @@ -1,12 +1,12 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, BaseRequestOptions } from '@src/types'; class FeatureFlags extends BaseService { - all(options: RequestOptions) { + all(options?: PaginatedRequestOptions) { return RequestHelper.get(this, 'features', options); } - set(name: string, options: RequestOptions) { + set(name: string, options?: BaseRequestOptions) { const encodedName = encodeURIComponent(name); return RequestHelper.post(this, `features/${encodedName}`, options); diff --git a/src/services/GeoNodes.ts b/src/services/GeoNodes.ts index 3a4c87ee7..47c70fda7 100644 --- a/src/services/GeoNodes.ts +++ b/src/services/GeoNodes.ts @@ -1,48 +1,46 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -export type GeonodeId = string | number; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, GeonodeId } from '@src/types'; class GeoNodes extends BaseService { - all(options: RequestOptions) { + all(options?: PaginatedRequestOptions) { return RequestHelper.get(this, 'geo_nodes', options); } - create(geonodeId: GeonodeId, options: RequestOptions) { + create(geonodeId: GeonodeId, options?: BaseRequestOptions) { const gId = encodeURIComponent(geonodeId); return RequestHelper.post(this, `geo_nodes/${gId}`, options); } - edit(geonodeId: GeonodeId, options: RequestOptions) { + edit(geonodeId: GeonodeId, options?: BaseRequestOptions) { const gId = encodeURIComponent(geonodeId); return RequestHelper.put(this, `geo_nodes/${gId}`, options); } - failures(options: RequestOptions) { + failures(options?: BaseRequestOptions) { return RequestHelper.post(this, 'geo_nodes/current/failures', options); } - repair(geonodeId: GeonodeId, options: RequestOptions) { + repair(geonodeId: GeonodeId, options?: Sudo) { const gId = encodeURIComponent(geonodeId); return RequestHelper.delete(this, `geo_nodes/${gId}`, options); } - show(geonodeId: GeonodeId, options: RequestOptions) { + show(geonodeId: GeonodeId, options?: Sudo) { const gId = encodeURIComponent(geonodeId); return RequestHelper.get(this, `geo_nodes/${gId}`, options); } - status(geonodeId: GeonodeId, options: RequestOptions) { + status(geonodeId: GeonodeId, options?: Sudo) { const gId = encodeURIComponent(geonodeId); return RequestHelper.get(this, `geo_nodes/${gId}/status`, options); } - statuses(options: RequestOptions) { + statuses(options?: PaginatedRequestOptions) { return RequestHelper.get(this, 'geo_nodes/statuses', options); } } diff --git a/src/services/GitLabCIYMLTemplates.ts b/src/services/GitLabCIYMLTemplates.ts index 7ce167eaa..7dd082b31 100644 --- a/src/services/GitLabCIYMLTemplates.ts +++ b/src/services/GitLabCIYMLTemplates.ts @@ -1,8 +1,8 @@ import { ResourceTemplates } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class GitLabCIYMLTemplates extends ResourceTemplates { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('gitlab_ci_ymls', options); } } diff --git a/src/services/GitignoreTemplates.ts b/src/services/GitignoreTemplates.ts index bf0e1f5a7..ae80fc959 100644 --- a/src/services/GitignoreTemplates.ts +++ b/src/services/GitignoreTemplates.ts @@ -1,8 +1,8 @@ import { ResourceTemplates } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class GitignoreTemplates extends ResourceTemplates { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('gitignores', options); } } diff --git a/src/services/GroupAccessRequests.ts b/src/services/GroupAccessRequests.ts index cf07d6da4..0588404ab 100644 --- a/src/services/GroupAccessRequests.ts +++ b/src/services/GroupAccessRequests.ts @@ -1,8 +1,8 @@ import { ResourceAccessRequests } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class GroupAccessRequests extends ResourceAccessRequests { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('groups', options); } } diff --git a/src/services/GroupBadges.ts b/src/services/GroupBadges.ts index 1121eb023..8198072a8 100644 --- a/src/services/GroupBadges.ts +++ b/src/services/GroupBadges.ts @@ -1,8 +1,8 @@ import { ResourceBadges } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class GroupBadges extends ResourceBadges { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('groups', options); } } diff --git a/src/services/GroupCustomAttributes.ts b/src/services/GroupCustomAttributes.ts index 2554c9106..b88c09163 100644 --- a/src/services/GroupCustomAttributes.ts +++ b/src/services/GroupCustomAttributes.ts @@ -1,8 +1,8 @@ import { ResourceCustomAttributes } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class GroupCustomAttributes extends ResourceCustomAttributes { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('groups', options); } } diff --git a/src/services/GroupIssueBoards.ts b/src/services/GroupIssueBoards.ts index 2e861f7d8..08bd4a011 100644 --- a/src/services/GroupIssueBoards.ts +++ b/src/services/GroupIssueBoards.ts @@ -1,8 +1,8 @@ import { ResourceIssueBoards } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class GroupIssueBoards extends ResourceIssueBoards { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('groups', options); } } diff --git a/src/services/GroupMembers.ts b/src/services/GroupMembers.ts index 1e0b99ea7..fb39cdff4 100644 --- a/src/services/GroupMembers.ts +++ b/src/services/GroupMembers.ts @@ -1,8 +1,8 @@ import { ResourceMembers } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class GroupMembers extends ResourceMembers { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('groups', options); } } diff --git a/src/services/GroupMilestones.ts b/src/services/GroupMilestones.ts index 449bf0d34..f01ea9506 100644 --- a/src/services/GroupMilestones.ts +++ b/src/services/GroupMilestones.ts @@ -1,8 +1,8 @@ import { ResourceMilestones } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class GroupMilestones extends ResourceMilestones { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('groups', options); } } diff --git a/src/services/GroupProjects.ts b/src/services/GroupProjects.ts index 8dcb8b412..857567d38 100644 --- a/src/services/GroupProjects.ts +++ b/src/services/GroupProjects.ts @@ -1,19 +1,17 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -type GroupProjectId = string | number; +import { PaginatedRequestOptions, BaseRequestOptions, GroupProjectId, ProjectId } from '@src/types'; class GroupProjects extends BaseService { - all(groupId: GroupProjectId, options: RequestOptions) { + all(groupId: GroupProjectId, options?: PaginatedRequestOptions) { const gId = encodeURIComponent(groupId); return RequestHelper.get(this, `groups/${gId}/projects`, options); } - add(groupId: GroupProjectId, projectId: ProjectId) { + add(groupId: GroupProjectId, projectId: ProjectId, options?: BaseRequestOptions) { const [gId, pId] = [groupId, projectId].map(encodeURIComponent); - return RequestHelper.post(this, `groups/${gId}/projects/${pId}`); + return RequestHelper.post(this, `groups/${gId}/projects/${pId}`, options); } } diff --git a/src/services/GroupVariables.ts b/src/services/GroupVariables.ts index 65d5da585..4f4d84391 100644 --- a/src/services/GroupVariables.ts +++ b/src/services/GroupVariables.ts @@ -1,5 +1,5 @@ import { ResourceVariables } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class GroupVariables extends ResourceVariables { constructor(baseParams: BaseModelContructorOptions) { diff --git a/src/services/Groups.ts b/src/services/Groups.ts index 83ca7575c..d6d619f7b 100644 --- a/src/services/Groups.ts +++ b/src/services/Groups.ts @@ -1,36 +1,35 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -type GroupId = string | number; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, GroupId } from '@src/types'; class Groups extends BaseService { - all(options: RequestOptions) { + all(options?: PaginatedRequestOptions) { return RequestHelper.get(this, 'groups', options); } - create(options: RequestOptions) { + create(options?: BaseRequestOptions) { return RequestHelper.post(this, 'groups', options); } - remove(groupId: GroupId) { + remove(groupId: GroupId, options?: Sudo) { const gId = encodeURIComponent(groupId); - return RequestHelper.delete(this, `groups/${gId}`); + return RequestHelper.delete(this, `groups/${gId}`, options); } - search(nameOrPath: string) { + search(nameOrPath: string, options?: Sudo) { return RequestHelper.get(this, 'groups', { search: nameOrPath, + ...options }); } - show(groupId: GroupId) { + show(groupId: GroupId, options?: BaseRequestOptions) { const gId = encodeURIComponent(groupId); - return RequestHelper.get(this, `groups/${gId}`); + return RequestHelper.get(this, `groups/${gId}`, options); } - subgroups(groupId: GroupId, options: RequestOptions) { + subgroups(groupId: GroupId, options?: PaginatedRequestOptions) { const gId = encodeURIComponent(groupId); return RequestHelper.get(this, `groups/${gId}/subgroups`, options); diff --git a/src/services/IssueAwardEmojis.ts b/src/services/IssueAwardEmojis.ts index 31120e442..10b84c02b 100644 --- a/src/services/IssueAwardEmojis.ts +++ b/src/services/IssueAwardEmojis.ts @@ -1,8 +1,8 @@ import { ResourceAwardEmojis } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class IssueAwardEmojis extends ResourceAwardEmojis { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('issues', options); } } diff --git a/src/services/IssueDiscussions.ts b/src/services/IssueDiscussions.ts index 35a7c8e5e..5448040ee 100644 --- a/src/services/IssueDiscussions.ts +++ b/src/services/IssueDiscussions.ts @@ -1,8 +1,8 @@ import { ResourceDiscussions } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class IssueDiscussions extends ResourceDiscussions { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', 'issues', options); } } diff --git a/src/services/IssueNotes.ts b/src/services/IssueNotes.ts index cf1728bc8..1299a0705 100644 --- a/src/services/IssueNotes.ts +++ b/src/services/IssueNotes.ts @@ -1,7 +1,8 @@ import { ResourceNotes } from '../templates'; +import { BaseServiceOptions } from '@src/types'; class IssueNotes extends ResourceNotes { - constructor(options: temporaryAny) { + constructor(options: BaseServiceOptions) { super('projects', 'issues', options); } } diff --git a/src/services/Issues.ts b/src/services/Issues.ts index 06925cece..5ccfe7767 100644 --- a/src/services/Issues.ts +++ b/src/services/Issues.ts @@ -1,38 +1,38 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { IssueId } from './EpicIssues'; -import { MergeRequestId } from './MergeRequests'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, ProjectId, IssueId } from '@src/types'; class Issues extends BaseService { - addSpentTime(projectId: ProjectId, issueId: IssueId, duration: Duration) { + addSpentTime(projectId: ProjectId, issueId: IssueId, duration: string, options?: Sudo) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); return RequestHelper.post(this, `projects/${pId}/issues/${iId}/add_spent_time`, { duration, + ...options, }); } - addTimeEstimate(projectId: ProjectId, issueId: IssueId, duration: Duration) { + addTimeEstimate(projectId: ProjectId, issueId: IssueId, duration: string, options?: Sudo) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); return RequestHelper.post(this, `projects/${pId}/issues/${iId}/time_estimate`, { duration, + ...options, }); } - all({ projectId, ...options }: { projectId: ProjectId } & RequestOptions) { + all({ projectId, ...options }: { projectId: ProjectId } & PaginatedRequestOptions) { const url = projectId ? `projects/${encodeURIComponent(projectId)}/issues` : 'issues'; return RequestHelper.get(this, url, options); } - create(projectId: ProjectId, options: RequestOptions) { + create(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/issues`, options); } - edit(projectId: ProjectId, issueId: IssueId, options: RequestOptions) { + edit(projectId: ProjectId, issueId: IssueId, options?: BaseRequestOptions) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); return RequestHelper.put(this, `projects/${pId}/issues/${iId}`, options); @@ -43,7 +43,7 @@ class Issues extends BaseService { issueIId: IssueId, targetProjectId: ProjectId, targetIssueId: IssueId, - options = {}, + options?: BaseRequestOptions, ) { const [pId, iId] = [projectId, issueIId].map(encodeURIComponent); const [targetpId, targetIId] = [targetProjectId, targetIssueId].map(encodeURIComponent); @@ -55,52 +55,52 @@ class Issues extends BaseService { }); } - participants(projectId: ProjectId, issueId: IssueId) { + participants(projectId: ProjectId, issueId: IssueId, options?: Sudo) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/issues/${iId}/participants`); + return RequestHelper.get(this, `projects/${pId}/issues/${iId}/participants`, options); } - remove(projectId: ProjectId, issueId: IssueId) { + remove(projectId: ProjectId, issueId: IssueId, options?: Sudo) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/issues/${iId}`); + return RequestHelper.delete(this, `projects/${pId}/issues/${iId}`, options); } - resetSpentTime(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + resetSpentTime(projectId: ProjectId, issueId: IssueId, options?: BaseRequestOptions) { + const [pId, iId] = [projectId, issueId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/issues/${mId}/reset_spent_time`); + return RequestHelper.post(this, `projects/${pId}/issues/${iId}/reset_spent_time`, options); } - resetTimeEstimate(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + resetTimeEstimate(projectId: ProjectId, issueId: IssueId, options?: Sudo) { + const [pId, iId] = [projectId, issueId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/issues/${mId}/reset_time_estimate`); + return RequestHelper.post(this, `projects/${pId}/issues/${iId}/reset_time_estimate`, options); } - show(projectId: ProjectId, issueId: IssueId) { + show(projectId: ProjectId, issueId: IssueId, options?: Sudo) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/issues/${iId}`); + return RequestHelper.get(this, `projects/${pId}/issues/${iId}`, options); } - subscribe(projectId: ProjectId, issueId: IssueId, options: RequestOptions) { + subscribe(projectId: ProjectId, issueId: IssueId, options?: Sudo) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); return RequestHelper.post(this, `projects/${pId}/issues/${iId}/subscribe`, options); } - timeStats(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + timeStats(projectId: ProjectId, issueId: IssueId, options?: Sudo) { + const [pId, iId] = [projectId, issueId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/issues/${mId}/time_stats`); + return RequestHelper.get(this, `projects/${pId}/issues/${iId}/time_stats`, options); } - unsubscribe(projectId: ProjectId, issueId: IssueId) { + unsubscribe(projectId: ProjectId, issueId: IssueId, options?: Sudo) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/issues/${iId}/unsubscribe`); + return RequestHelper.delete(this, `projects/${pId}/issues/${iId}/unsubscribe`, options); } } diff --git a/src/services/Jobs.ts b/src/services/Jobs.ts index 9980d2d57..df7b15a4f 100644 --- a/src/services/Jobs.ts +++ b/src/services/Jobs.ts @@ -1,98 +1,109 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { PipelineId } from './Pipelines'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -export type JobId = string | number; +import { + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + ProjectId, + JobId, + PipelineId, + JobScope, +} from '@src/types'; class Jobs extends BaseService { - all(projectId: ProjectId, options = {}) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/jobs`, options); } - cancel(projectId: ProjectId, jobId: JobId) { + cancel(projectId: ProjectId, jobId: JobId, options?: Sudo) { const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/jobs/${jId}/cancel`); + return RequestHelper.post(this, `projects/${pId}/jobs/${jId}/cancel`, options); } downloadSingleArtifactFile( projectId: ProjectId, jobId: JobId, artifactPath: string, - options = { stream: false }, + { stream = false, ...options }: { stream?: boolean } & BaseRequestOptions, ) { const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - return RequestHelper.get( - this, - `projects/${pId}/jobs/${jId}/artifacts/${artifactPath}`, - options as temporaryAny, - { stream: options.stream }, - ); + if (stream) { + return RequestHelper.stream( + this, + `projects/${pId}/jobs/${jId}/artifacts/${artifactPath}`, + options, + ); + } + + return RequestHelper.get(this, `projects/${pId}/jobs/${jId}/artifacts/${artifactPath}`, options); } downloadLatestArtifactFile( projectId: ProjectId, ref: string, name: string, - options = { stream: false }, + { stream = false, ...options }: { stream?: boolean } & BaseRequestOptions, ) { const [pId, rId, jobName] = [projectId, ref, name].map(encodeURIComponent); - return RequestHelper.get( - this, - `projects/${pId}/jobs/artifacts/${rId}/download?job=${jobName}`, - options as temporaryAny, - { stream: options.stream }, - ); + if (stream) { + return RequestHelper.stream( + this, + `projects/${pId}/jobs/artifacts/${rId}/download?job=${jobName}`, + options, + ); + } + + return RequestHelper.get(this, `projects/${pId}/jobs/artifacts/${rId}/download?job=${jobName}`, options); } - downloadTraceFile(projectId: ProjectId, jobId: JobId) { + downloadTraceFile(projectId: ProjectId, jobId: JobId, options?: Sudo) { const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/jobs/${jId}/trace`); + return RequestHelper.get(this, `projects/${pId}/jobs/${jId}/trace`, options); } - erase(projectId: ProjectId, jobId: JobId) { + erase(projectId: ProjectId, jobId: JobId, options?: Sudo) { const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/jobs/${jId}/erase`); + return RequestHelper.post(this, `projects/${pId}/jobs/${jId}/erase`, options); } - keepArtifacts(projectId: ProjectId, jobId: JobId) { + keepArtifacts(projectId: ProjectId, jobId: JobId, options?: Sudo) { const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/jobs/${jId}/artifacts/keep`); + return RequestHelper.post(this, `projects/${pId}/jobs/${jId}/artifacts/keep`, options); } - play(projectId: ProjectId, jobId: JobId) { + play(projectId: ProjectId, jobId: JobId, options?: Sudo) { const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/jobs/${jId}/play`); + return RequestHelper.post(this, `projects/${pId}/jobs/${jId}/play`, options); } - retry(projectId: ProjectId, jobId: JobId) { + retry(projectId: ProjectId, jobId: JobId, options?: Sudo) { const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/jobs/${jId}/retry`); + return RequestHelper.post(this, `projects/${pId}/jobs/${jId}/retry`, options); } - show(projectId: ProjectId, jobId: JobId) { + show(projectId: ProjectId, jobId: JobId, options?: Sudo) { const [pId, jId] = [projectId, jobId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/jobs/${jId}`); + return RequestHelper.get(this, `projects/${pId}/jobs/${jId}`, options); } - showPipelineJobs(projectId: ProjectId, pipelineId: PipelineId, options: RequestOptions) { + showPipelineJobs( + projectId: ProjectId, + pipelineId: PipelineId, + options: { scope: JobScope } & Sudo, + ) { const [pId, ppId] = [projectId, pipelineId].map(encodeURIComponent); - return RequestHelper.get( - this, - `projects/${pId}/pipelines/${ppId}/jobs`, - options, - ); + return RequestHelper.get(this, `projects/${pId}/pipelines/${ppId}/jobs`, options); } } diff --git a/src/services/Keys.ts b/src/services/Keys.ts index 5c79390c1..d5fb798a3 100644 --- a/src/services/Keys.ts +++ b/src/services/Keys.ts @@ -1,10 +1,11 @@ import { BaseService, RequestHelper } from '../infrastructure'; +import { Sudo, KeyId } from '@src/types'; class Keys extends BaseService { - show(keyId: KeyId) { + show(keyId: KeyId, options?: Sudo) { const kId = encodeURIComponent(keyId); - return RequestHelper.get(this, `keys/${kId}`); + return RequestHelper.get(this, `keys/${kId}`, options); } } diff --git a/src/services/Labels.ts b/src/services/Labels.ts index 4ff56a577..eb677fb49 100644 --- a/src/services/Labels.ts +++ b/src/services/Labels.ts @@ -1,42 +1,41 @@ import { BaseService, RequestHelper } from '../infrastructure'; - -type LabelId = string | number; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, ProjectId, LabelId } from '@src/types'; class Labels extends BaseService { - all(projectId: ProjectId, options = {}) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/labels`, options); } - create(projectId: ProjectId, options = {}) { + create(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/labels`, options); } - edit(projectId: ProjectId, labelName: string, options = {}) { + edit(projectId: ProjectId, labelName: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.put(this, `projects/${pId}/labels`, { name: labelName, ...options }); } - remove(projectId: ProjectId, labelName: string) { + remove(projectId: ProjectId, labelName: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.delete(this, `projects/${pId}/labels`, { name: labelName }); + return RequestHelper.delete(this, `projects/${pId}/labels`, { name: labelName, ...options }); } - subscribe(projectId: ProjectId, labelId: LabelId, options = {}) { + subscribe(projectId: ProjectId, labelId: LabelId, options?: Sudo) { const [pId, lId] = [projectId, labelId].map(encodeURIComponent); return RequestHelper.post(this, `projects/${pId}/issues/${lId}/subscribe`, options); } - unsubscribe(projectId: ProjectId, labelId: LabelId) { + unsubscribe(projectId: ProjectId, labelId: LabelId, options?: Sudo) { const [pId, lId] = [projectId, labelId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/issues/${lId}/unsubscribe`); + return RequestHelper.delete(this, `projects/${pId}/issues/${lId}/unsubscribe`, options); } } diff --git a/src/services/Licence.ts b/src/services/Licence.ts index d002d8232..43af03602 100644 --- a/src/services/Licence.ts +++ b/src/services/Licence.ts @@ -1,12 +1,13 @@ import { BaseService, RequestHelper } from '../infrastructure'; +import { Sudo } from '@src/types'; class Licence extends BaseService { - all() { - return RequestHelper.get(this, 'licence'); + all(options?: Sudo) { + return RequestHelper.get(this, 'licence', options); } - create() { - return RequestHelper.post(this, 'licence'); + create(options?: Sudo) { + return RequestHelper.post(this, 'licence', options); } } diff --git a/src/services/LicenceTemplates.ts b/src/services/LicenceTemplates.ts index 99921012b..062e7bd90 100644 --- a/src/services/LicenceTemplates.ts +++ b/src/services/LicenceTemplates.ts @@ -1,8 +1,8 @@ import { ResourceTemplates } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class LicenceTemplates extends ResourceTemplates { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('licences', options); } } diff --git a/src/services/Lint.ts b/src/services/Lint.ts index 10e2eff13..e7b863f3d 100644 --- a/src/services/Lint.ts +++ b/src/services/Lint.ts @@ -1,8 +1,9 @@ import { BaseService, RequestHelper } from '../infrastructure'; +import { Sudo } from '@src/types'; class Lint extends BaseService { - lint(content: string) { - return RequestHelper.post(this, 'lint', { content }); + lint(content: string, options?: Sudo) { + return RequestHelper.post(this, 'lint', { content, ...options}); } } diff --git a/src/services/Markdown.ts b/src/services/Markdown.ts index 503614f58..b7c77a690 100644 --- a/src/services/Markdown.ts +++ b/src/services/Markdown.ts @@ -1,8 +1,8 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { Sudo, ProjectId } from '@src/types'; class Markdown extends BaseService { - render(text: string, options: RequestOptions) { + render(text: string, options: { gfm?: string, project?: ProjectId } & Sudo) { return RequestHelper.post(this, 'markdown', { text, ...options }); } } diff --git a/src/services/MergeRequestAwardEmojis.ts b/src/services/MergeRequestAwardEmojis.ts index 8ed2f5f2d..e4a18bd95 100644 --- a/src/services/MergeRequestAwardEmojis.ts +++ b/src/services/MergeRequestAwardEmojis.ts @@ -1,8 +1,8 @@ import { ResourceAwardEmojis } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class MergeRequestAwardEmojis extends ResourceAwardEmojis { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('merge_requests', options); } } diff --git a/src/services/MergeRequestDiscussions.ts b/src/services/MergeRequestDiscussions.ts index 8528a0741..9503566fd 100644 --- a/src/services/MergeRequestDiscussions.ts +++ b/src/services/MergeRequestDiscussions.ts @@ -1,8 +1,8 @@ import { ResourceDiscussions } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class MergeRequestDiscussions extends ResourceDiscussions { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', 'merge_requests', options); } } diff --git a/src/services/MergeRequestNotes.ts b/src/services/MergeRequestNotes.ts index 1913a3e53..c57988b34 100644 --- a/src/services/MergeRequestNotes.ts +++ b/src/services/MergeRequestNotes.ts @@ -1,8 +1,8 @@ import { ResourceNotes } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class MergeRequestNotes extends ResourceNotes { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', 'merge_requests', options); } } diff --git a/src/services/MergeRequests.ts b/src/services/MergeRequests.ts index dfa3422e7..47ebb6045 100644 --- a/src/services/MergeRequests.ts +++ b/src/services/MergeRequests.ts @@ -1,72 +1,139 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -export type MergeRequestId = string | number; +import { + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + ProjectId, + MergeRequestId, + GroupId, + UserId, +} from '@src/types'; class MergeRequests extends BaseService { - accept(projectId: ProjectId, mergerequestId: MergeRequestId, options: RequestOptions) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + accept(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: BaseRequestOptions) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.put(this, `projects/${pId}/merge_requests/${mId}/merge`, options); + return RequestHelper.put(this, `projects/${pId}/merge_requests/${mIId}/merge`, options); } - addSpentTime(projectId: ProjectId, mergerequestId: MergeRequestId, duration: Duration) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + addSpentTime( + projectId: ProjectId, + mergerequestIId: MergeRequestId, + duration: string, + options?: Sudo, + ) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/issues/${mId}/add_spent_time`, { + return RequestHelper.post(this, `projects/${pId}/issues/${mIId}/add_spent_time`, { duration, + ...options, }); } - addTimeEstimate(projectId: ProjectId, mergerequestId: MergeRequestId, duration: Duration) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + addTimeEstimate( + projectId: ProjectId, + mergerequestIId: MergeRequestId, + duration: string, + options?: Sudo, + ) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/issues/${mId}/time_estimate`, { + return RequestHelper.post(this, `projects/${pId}/issues/${mIId}/time_estimate`, { duration, + ...options, }); } - approve(projectId: ProjectId, mergerequestId: MergeRequestId, { sha }: { sha: string }) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + all({ + projectId, + groupId, + ...options + }: { projectId?: ProjectId; groupId: GroupId } & PaginatedRequestOptions) { + let url; + + if (projectId) { + url = `projects/${encodeURIComponent(projectId)}/merge_requests`; + } else if (groupId) { + url = `groups/${encodeURIComponent(groupId)}/merge_requests`; + } else { + url = 'merge_requests'; + } - return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/approve`, { sha }); + return RequestHelper.get(this, url, options); } - approvals(projectId: ProjectId, { mergerequestId }: { mergerequestId?: MergeRequestId } = {}) { - const pId = encodeURIComponent(projectId); - const mergeRequest = mergerequestId ? `merge_requests/${encodeURIComponent(mergerequestId)}` : ''; + approve( + projectId: ProjectId, + mergerequestIId: MergeRequestId, + options: { sha: string } & BaseRequestOptions, + ) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/${mergeRequest}/approvals`); + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mIId}/approve`, options); } - all({ projectId, ...options }: { projectId?: ProjectId } = {}) { - const url = projectId ? `projects/${encodeURIComponent(projectId)}/merge_requests` : 'merge_requests'; + approvals( + projectId: ProjectId, + { mergerequestIId, ...options }: { mergerequestIId: MergeRequestId } & BaseRequestOptions, + ) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); + + let url; + + if (mergerequestIId) { + url = `projects/${pId}/merge_requests/${mIId}/approvals`; + } else { + url = `projects/${pId}/approvals`; + } return RequestHelper.get(this, url, options); } - cancelOnPipelineSucess(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + approvers( + projectId: ProjectId, + approverIds: UserId[], + approverGroupIds: GroupId[], + { mergerequestIId, ...options }: { mergerequestIId: MergeRequestId } & BaseRequestOptions, + ) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); + + let url; + + if (mergerequestIId) { + url = `projects/${pId}/merge_requests/${mIId}/approvals`; + } else { + url = `projects/${pId}/approvals`; + } - return RequestHelper.put(this, `projects/${pId}/merge_requests/${mId}/cancel_merge_when_pipeline_succeeds`); + return RequestHelper.post(this, url, { approverIds, approverGroupIds, ...options }); } - changes(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + cancelOnPipelineSucess(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/changes`); + return RequestHelper.put( + this, + `projects/${pId}/merge_requests/${mIId}/cancel_merge_when_pipeline_succeeds`, + options, + ); } - closesIssues(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + changes(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/closes_issues`); + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mIId}/changes`, options); } - commits(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + closesIssues(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/commits`); + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mIId}/closes_issues`, options); + } + + commits(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mIId}/commits`, options); } create( @@ -74,7 +141,7 @@ class MergeRequests extends BaseService { sourceBranch: string, targetBranch: string, title: string, - options: RequestOptions, + options?: BaseRequestOptions, ) { const pId = encodeURIComponent(projectId); @@ -87,85 +154,104 @@ class MergeRequests extends BaseService { }); } - edit(projectId: ProjectId, mergerequestId: MergeRequestId, options: RequestOptions) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + edit(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: BaseRequestOptions) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.put(this, `projects/${pId}/merge_requests/${mId}`, options); + return RequestHelper.put(this, `projects/${pId}/merge_requests/${mIId}`, options); } - editApprovals(projectId: ProjectId, { mergerequestId, ...options }: temporaryAny) { - const pId = encodeURIComponent(projectId); - const mergeRequest = mergerequestId ? `merge_requests/${encodeURIComponent(mergerequestId)}/` : ''; + editApprovals( + projectId: ProjectId, + { mergerequestIId, ...options }: { mergerequestIId: MergeRequestId } & BaseRequestOptions, + ) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/${mergeRequest}approvals`, options); - } + let url; - editApprovers(projectId: ProjectId, { mergerequestId, ...options }: temporaryAny) { - const pId = encodeURIComponent(projectId); - const mergeRequest = mergerequestId ? `merge_requests/${encodeURIComponent(mergerequestId)}/` : ''; + if (mergerequestIId) { + url = `projects/${pId}/merge_requests/${mIId}/approvals`; + } else { + url = `projects/${pId}/approvals`; + } - return RequestHelper.put(this, `projects/${pId}/${mergeRequest}approvers`, options); + return RequestHelper.post(this, url, options); } - pipelines(projectId: ProjectId, { mergerequestId }: { mergerequestId?: string } = {}) { - const pId = encodeURIComponent(projectId); - const mergeRequest = mergerequestId ? `merge_requests/${encodeURIComponent(mergerequestId)}` : ''; + pipelines(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/${mergeRequest}/pipelines`); + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mIId}/pipelines`, options); } - remove(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + remove(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/merge_requests/${mId}`); + return RequestHelper.delete(this, `projects/${pId}/merge_requests/${mIId}`, options); } - resetSpentTime(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + resetSpentTime(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/reset_spent_time`); + return RequestHelper.post( + this, + `projects/${pId}/merge_requests/${mIId}/reset_spent_time`, + options, + ); } - resetTimeEstimate(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + resetTimeEstimate(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/reset_time_estimate`); + return RequestHelper.post( + this, + `projects/${pId}/merge_requests/${mIId}/reset_time_estimate`, + options, + ); } - show(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + show(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}`); + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mIId}`, options); } - timeStats(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + timeStats(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/time_stats`); + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mIId}/time_stats`, options); } - version(projectId: ProjectId, mergerequestId: MergeRequestId, versionId: string | number) { - const [pId, mId, vId] = [projectId, mergerequestId, versionId].map(encodeURIComponent); + version( + projectId: ProjectId, + mergerequestIId: MergeRequestId, + versionId: number, + options?: Sudo, + ) { + const [pId, mIId, vId] = [projectId, mergerequestIId, versionId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/versions/${vId}`); + return RequestHelper.get( + this, + `projects/${pId}/merge_requests/${mIId}/versions/${vId}`, + options, + ); } - versions(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + versions(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/versions`); + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mIId}/versions`, options); } - unapprove(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + unapprove(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/approve`); + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mIId}/approve`, options); } - unsubscribe(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + unsubscribe(projectId: ProjectId, mergerequestIId: MergeRequestId, options?: Sudo) { + const [pId, mIId] = [projectId, mergerequestIId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/merge_requests/${mId}/unsubscribe`); + return RequestHelper.delete(this, `projects/${pId}/merge_requests/${mIId}/unsubscribe`, options); } } diff --git a/src/services/Namespaces.ts b/src/services/Namespaces.ts index 1dab99851..9a69545e7 100644 --- a/src/services/Namespaces.ts +++ b/src/services/Namespaces.ts @@ -1,15 +1,15 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, Sudo, NamespaceId } from '@src/types'; class Namespaces extends BaseService { - all(options: RequestOptions) { + all(options?: PaginatedRequestOptions) { return RequestHelper.get(this, 'namespaces', options); } - show(namespaceId: string | number) { + show(namespaceId: NamespaceId, options: { search?: string } & Sudo) { const nId = encodeURIComponent(namespaceId); - return RequestHelper.get(this, `namespaces/${nId}`); + return RequestHelper.get(this, `namespaces/${nId}`, options); } } diff --git a/src/services/NotificationSettings.ts b/src/services/NotificationSettings.ts index 8bfb73d92..92d385ade 100644 --- a/src/services/NotificationSettings.ts +++ b/src/services/NotificationSettings.ts @@ -1,46 +1,18 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + BaseRequestOptions, + PaginatedRequestOptions, + NotificationSettingLevel, + ProjectId, + GroupId +} from '@src/types'; -const LEVELS = { - DISABLED: 'disabled', - PARTICIPATING: 'participating', - WATCH: 'watch', - GLOBAL: 'global', - MENTION: 'mention', - CUSTOM: 'custom', -}; - -const EVENTS = { - NEW_NOTE: 'new_note', - NEW_ISSUE: 'new_issue', - REOPEM_ISSUE: 'reopen_issue', - CLOSE_ISSUE: 'close_issue', - REASSIGN_ISSUE: 'reassign_issue', - NEW_MERGE_REQUESTS: 'new_merge_request', - PUSH_TO_MERGE_REQUEST: 'push_to_merge_request', - REOPEN_MERGE_REQUESTS: 'reopen_merge_request', - CLOSE_MERGE_REQUEST: 'close_merge_request', - REASSIGN_MERGE_REQUEST: 'reassign_merge_request', - MERGE_MERGE_REQUEST: 'merge_merge_request', - FAILED_PIPELINE: 'failed_pipeline', - SUCCESS_PIPELINE: 'success_pipeline', -}; -interface NotificationSettingsOptions { - projectId?: ProjectId; - groupId?: string; -} class NotificationSettings extends BaseService { - protected LEVELS: typeof LEVELS; - protected EVENTS: typeof EVENTS; - constructor(baseParams: BaseModelContructorOptions) { - super(baseParams); - - this.LEVELS = LEVELS; - this.EVENTS = EVENTS; - } - - all({ projectId, groupId }: NotificationSettingsOptions = {}) { + all({ + projectId, + groupId, + ...options + }: { projectId?: ProjectId; groupId?: GroupId } & PaginatedRequestOptions = {}) { let url = ''; if (projectId) { @@ -49,10 +21,18 @@ class NotificationSettings extends BaseService { url += `groups/${encodeURIComponent(groupId)}/`; } - return RequestHelper.get(this, `${url}notification_settings`); + return RequestHelper.get(this, `${url}notification_settings`, options); } - edit(options: RequestOptions, { projectId, groupId }: NotificationSettingsOptions = {}) { + edit({ + projectId, + groupId, + ...options + }: { + projectId?: ProjectId; + groupId?: GroupId; + level?: NotificationSettingLevel; + } & BaseRequestOptions = {}) { let url = ''; if (projectId) { diff --git a/src/services/PagesDomains.ts b/src/services/PagesDomains.ts index 903549854..085021abc 100644 --- a/src/services/PagesDomains.ts +++ b/src/services/PagesDomains.ts @@ -1,38 +1,35 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, ProjectId } from '@src/types'; -interface PagesDomainsOptions { - projectId?: ProjectId; -} class PagesDomains extends BaseService { - all({ projectId }: PagesDomainsOptions = {}) { + all({ projectId, ...options }: { projectId?: ProjectId } & PaginatedRequestOptions = {}) { const url = projectId ? `projects/${encodeURIComponent(projectId)}/` : ''; - return RequestHelper.get(this, `${url}pages/domains`); + return RequestHelper.get(this, `${url}pages/domains`, options); } - create(projectId: ProjectId, domain: string, options: RequestOptions) { + create(projectId: ProjectId, domain: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/pages/domains`, { domain, ...options }); } - edit(projectId: ProjectId, domain: string, options: RequestOptions) { + edit(projectId: ProjectId, domain: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.put(this, `projects/${pId}/pages/domains/${domain}`, options); } - show(projectId: ProjectId, domain: string) { + show(projectId: ProjectId, domain: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/pages/domains/${domain}`); + return RequestHelper.get(this, `projects/${pId}/pages/domains/${domain}`, options); } - remove(projectId: ProjectId, domain: string) { + remove(projectId: ProjectId, domain: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.delete(this, `projects/${pId}/pages/domains/${domain}`); + return RequestHelper.delete(this, `projects/${pId}/pages/domains/${domain}`, options); } } diff --git a/src/services/PipelineSchedules.ts b/src/services/PipelineSchedules.ts index 0596d29e6..bcdd06f70 100644 --- a/src/services/PipelineSchedules.ts +++ b/src/services/PipelineSchedules.ts @@ -1,10 +1,14 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -type PipelineScheduleId = string | number; +import { + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + ProjectId, + PipelineScheduleId, +} from '@src/types'; class PipelineSchedules extends BaseService { - all(projectId: ProjectId, options: RequestOptions) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/pipeline_schedules`, options); @@ -14,8 +18,8 @@ class PipelineSchedules extends BaseService { projectId: ProjectId, description: string, ref: string, - cron: temporaryAny, - options: RequestOptions, + cron: string, + options?: BaseRequestOptions, ) { const pId = encodeURIComponent(projectId); @@ -27,28 +31,32 @@ class PipelineSchedules extends BaseService { }); } - edit(projectId: ProjectId, scheduleId: PipelineScheduleId, options: RequestOptions) { + edit(projectId: ProjectId, scheduleId: PipelineScheduleId, options?: BaseRequestOptions) { const [pId, sId] = [projectId, scheduleId].map(encodeURIComponent); return RequestHelper.put(this, `projects/${pId}/pipeline_schedules/${sId}`, options); } - remove(projectId: ProjectId, scheduleId: PipelineScheduleId) { + remove(projectId: ProjectId, scheduleId: PipelineScheduleId, options?: Sudo) { const [pId, sId] = [projectId, scheduleId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/pipeline_schedules/${sId}`); + return RequestHelper.delete(this, `projects/${pId}/pipeline_schedules/${sId}`, options); } - show(projectId: ProjectId, scheduleId: PipelineScheduleId) { + show(projectId: ProjectId, scheduleId: PipelineScheduleId, options?: Sudo) { const [pId, sId] = [projectId, scheduleId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/pipeline_schedules/${sId}`); + return RequestHelper.get(this, `projects/${pId}/pipeline_schedules/${sId}`, options); } - takeOwnership(projectId: ProjectId, scheduleId: PipelineScheduleId) { + takeOwnership(projectId: ProjectId, scheduleId: PipelineScheduleId, options?: Sudo) { const [pId, sId] = [projectId, scheduleId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/pipeline_schedules/${sId}/take_ownership`); + return RequestHelper.post( + this, + `projects/${pId}/pipeline_schedules/${sId}/take_ownership`, + options, + ); } } diff --git a/src/services/Pipelines.ts b/src/services/Pipelines.ts index 256ad02a7..03fb44730 100644 --- a/src/services/Pipelines.ts +++ b/src/services/Pipelines.ts @@ -1,40 +1,45 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -export type PipelineId = string | number; +import { + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + ProjectId, + PipelineId, + JobScope, +} from '@src/types'; class Pipelines extends BaseService { - all(projectId: ProjectId, options = {}) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/pipelines`, options); } - create(projectId: ProjectId, ref: string) { + create(projectId: ProjectId, ref: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); - return RequestHelper.post(this, `projects/${pId}/pipeline`, { ref }); + return RequestHelper.post(this, `projects/${pId}/pipeline`, { ref, ...options }); } - show(projectId: ProjectId, pipelineId: PipelineId) { + show(projectId: ProjectId, pipelineId: PipelineId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/pipelines/${pipelineId}`); + return RequestHelper.get(this, `projects/${pId}/pipelines/${pipelineId}`, options); } - retry(projectId: ProjectId, pipelineId: PipelineId) { + retry(projectId: ProjectId, pipelineId: PipelineId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.post(this, `projects/${pId}/pipelines/${pipelineId}/retry`); + return RequestHelper.post(this, `projects/${pId}/pipelines/${pipelineId}/retry`, options); } - cancel(projectId: ProjectId, pipelineId: PipelineId) { + cancel(projectId: ProjectId, pipelineId: PipelineId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.post(this, `projects/${pId}/pipelines/${pipelineId}/cancel`); + return RequestHelper.post(this, `projects/${pId}/pipelines/${pipelineId}/cancel`, options); } - showJobs(projectId: ProjectId, pipelineId: PipelineId, options: RequestOptions) { + showJobs(projectId: ProjectId, pipelineId: PipelineId, options: { scope: JobScope } & Sudo) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/pipelines/${pipelineId}/jobs`, options); diff --git a/src/services/ProjectAccessRequests.ts b/src/services/ProjectAccessRequests.ts index 868818e7d..f30170246 100644 --- a/src/services/ProjectAccessRequests.ts +++ b/src/services/ProjectAccessRequests.ts @@ -1,8 +1,8 @@ import { ResourceAccessRequests } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class ProjectAccessRequests extends ResourceAccessRequests { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', options); } } diff --git a/src/services/ProjectBadges.ts b/src/services/ProjectBadges.ts index 9392c23ee..c0ec5f01a 100644 --- a/src/services/ProjectBadges.ts +++ b/src/services/ProjectBadges.ts @@ -1,8 +1,8 @@ import { ResourceBadges } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class ProjectBadges extends ResourceBadges { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', options); } } diff --git a/src/services/ProjectCustomAttributes.ts b/src/services/ProjectCustomAttributes.ts index cb02775c6..50612e7e3 100644 --- a/src/services/ProjectCustomAttributes.ts +++ b/src/services/ProjectCustomAttributes.ts @@ -1,8 +1,8 @@ import { ResourceCustomAttributes } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class ProjectCustomAttributes extends ResourceCustomAttributes { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', options); } } diff --git a/src/services/ProjectHooks.ts b/src/services/ProjectHooks.ts index 45d96a2f4..136917f67 100644 --- a/src/services/ProjectHooks.ts +++ b/src/services/ProjectHooks.ts @@ -1,36 +1,35 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { HookId } from './SystemHooks'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, ProjectId, HookId } from '@src/types'; class ProjectHooks extends BaseService { - all(projectId: ProjectId, options: RequestOptions) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/hooks`, options); } - show(projectId: ProjectId, hookId: HookId) { + show(projectId: ProjectId, hookId: HookId, options?: Sudo) { const [pId, hId] = [projectId, hookId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/hooks/${hId}`); + return RequestHelper.get(this, `projects/${pId}/hooks/${hId}`, options); } - add(projectId: ProjectId, url: string, options: RequestOptions) { + add(projectId: ProjectId, url: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/hooks`, { url, ...options }); } - edit(projectId: ProjectId, hookId: HookId, url: string, options: RequestOptions) { + edit(projectId: ProjectId, hookId: HookId, url: string, options?: BaseRequestOptions) { const [pId, hId] = [projectId, hookId].map(encodeURIComponent); return RequestHelper.put(this, `projects/${pId}/hooks/${hId}`, { url, ...options }); } - remove(projectId: ProjectId, hookId: HookId) { + remove(projectId: ProjectId, hookId: HookId, options?: Sudo) { const [pId, hId] = [projectId, hookId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/hooks/${hId}`); + return RequestHelper.delete(this, `projects/${pId}/hooks/${hId}`, options); } } diff --git a/src/services/ProjectImportExport.ts b/src/services/ProjectImportExport.ts index 513f4661c..36267a2fa 100644 --- a/src/services/ProjectImportExport.ts +++ b/src/services/ProjectImportExport.ts @@ -1,30 +1,43 @@ +import FormData from 'form-data'; import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { BaseRequestOptions, Sudo, ProjectId } from '@src/types'; class ProjectImportExport extends BaseService { - download(projectId: ProjectId) { + download(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/export/download`); + return RequestHelper.get(this, `projects/${pId}/export/download`, options); } - exportStatus(projectId: ProjectId) { + exportStatus(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/export`); + return RequestHelper.get(this, `projects/${pId}/export`, options); } - import(file: temporaryAny, path: string, options: RequestOptions) { - return RequestHelper.post(this, 'projects/import', { file, path, ...options }); + import(content: string, path: string, options?: BaseRequestOptions) { + const form = new FormData(); + + form.append(path, { + file: { + value: content, + options: { + filename: path, + contentType: 'application/octet-stream', + }, + }, + }); + + return RequestHelper.post(this, 'projects/import', { ...form, ...options }); } - importStatus(projectId: ProjectId) { + importStatus(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/import`); + return RequestHelper.get(this, `projects/${pId}/import`, options); } - schedule(projectId: ProjectId, options: RequestOptions) { + schedule(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/export`, options); diff --git a/src/services/ProjectIssueBoards.ts b/src/services/ProjectIssueBoards.ts index a6699dddc..92bf5c514 100644 --- a/src/services/ProjectIssueBoards.ts +++ b/src/services/ProjectIssueBoards.ts @@ -1,8 +1,8 @@ import { ResourceIssueBoards } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class ProjectIssueBoards extends ResourceIssueBoards { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', options); } } diff --git a/src/services/ProjectMembers.ts b/src/services/ProjectMembers.ts index d54644aa5..4cbc39d11 100644 --- a/src/services/ProjectMembers.ts +++ b/src/services/ProjectMembers.ts @@ -1,8 +1,8 @@ import { ResourceMembers } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class ProjectMembers extends ResourceMembers { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', options); } } diff --git a/src/services/ProjectMilestones.ts b/src/services/ProjectMilestones.ts index 10d78b20a..f65ac2d3a 100644 --- a/src/services/ProjectMilestones.ts +++ b/src/services/ProjectMilestones.ts @@ -1,8 +1,8 @@ import { ResourceMilestones } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class ProjectMilestones extends ResourceMilestones { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', options); } } diff --git a/src/services/ProjectSnippetAwardEmojis.ts b/src/services/ProjectSnippetAwardEmojis.ts index e697a6400..9715fd450 100644 --- a/src/services/ProjectSnippetAwardEmojis.ts +++ b/src/services/ProjectSnippetAwardEmojis.ts @@ -1,8 +1,8 @@ import { ResourceAwardEmojis } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class ProjectSnippetAwardEmojis extends ResourceAwardEmojis { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('issues', options); } } diff --git a/src/services/ProjectSnippetDiscussions.ts b/src/services/ProjectSnippetDiscussions.ts index 966458cc6..0970ffba3 100644 --- a/src/services/ProjectSnippetDiscussions.ts +++ b/src/services/ProjectSnippetDiscussions.ts @@ -1,8 +1,8 @@ import { ResourceDiscussions } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class ProjectSnippetDiscussions extends ResourceDiscussions { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', 'snippets', options); } } diff --git a/src/services/ProjectSnippetNotes.ts b/src/services/ProjectSnippetNotes.ts index d976f22e0..14ac2949a 100644 --- a/src/services/ProjectSnippetNotes.ts +++ b/src/services/ProjectSnippetNotes.ts @@ -1,8 +1,8 @@ import { ResourceNotes } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class ProjectSnippetNotes extends ResourceNotes { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('projects', 'snippets', options); } } diff --git a/src/services/ProjectSnippets.ts b/src/services/ProjectSnippets.ts index 9c6eba5b3..508f8e952 100644 --- a/src/services/ProjectSnippets.ts +++ b/src/services/ProjectSnippets.ts @@ -1,25 +1,24 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + ProjectId, + SnippetId, + SnippetVisibility, +} from '@src/types'; -const VISIBILITY_LEVELS = { - PRIVATE: 'private', - INTERNAL: 'internal', - PUBLIC: 'public', -}; - -type SnippetId = string | number; -type VisibilityLevel = 'private' | 'public' | 'internal'; class ProjectSnippets extends BaseService { - all(projectId: ProjectId, options = {}) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/snippets`, options); } - content(projectId: ProjectId, snippetId: SnippetId) { + content(projectId: ProjectId, snippetId: SnippetId, options?: Sudo) { const [pId, sId] = [projectId, snippetId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/snippets/${sId}/raw`); + return RequestHelper.get(this, `projects/${pId}/snippets/${sId}/raw`, options); } create( @@ -27,8 +26,8 @@ class ProjectSnippets extends BaseService { title: string, fileName: string, code: string, - visibility: VisibilityLevel, - options: RequestOptions = {}, + visibility: SnippetVisibility, + options?: BaseRequestOptions, ) { const pId = encodeURIComponent(projectId); @@ -41,30 +40,29 @@ class ProjectSnippets extends BaseService { }); } - edit(projectId: ProjectId, snippetId: SnippetId, options: RequestOptions) { + edit(projectId: ProjectId, snippetId: SnippetId, options?: BaseRequestOptions) { const [pId, sId] = [projectId, snippetId].map(encodeURIComponent); return RequestHelper.put(this, `projects/${pId}/snippets/${sId}`, options); } - remove(projectId: ProjectId, snippetId: SnippetId) { + remove(projectId: ProjectId, snippetId: SnippetId, options?: Sudo) { const [pId, sId] = [projectId, snippetId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/snippets/${sId}`); + return RequestHelper.delete(this, `projects/${pId}/snippets/${sId}`, options); } - show(projectId: ProjectId, snippetId: SnippetId) { + show(projectId: ProjectId, snippetId: SnippetId, options?: Sudo) { const [pId, sId] = [projectId, snippetId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/snippets/${sId}`); + return RequestHelper.get(this, `projects/${pId}/snippets/${sId}`, options); } - userAgentDetails(projectId: ProjectId, snippetId: SnippetId) { + userAgentDetails(projectId: ProjectId, snippetId: SnippetId, options?: Sudo) { const [pId, sId] = [projectId, snippetId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/snippets/${sId}/user_agent_detail`); + return RequestHelper.get(this, `projects/${pId}/snippets/${sId}/user_agent_detail`, options); } } export default ProjectSnippets; -export { VISIBILITY_LEVELS }; diff --git a/src/services/ProjectVariables.ts b/src/services/ProjectVariables.ts index ea309573d..913cb5506 100644 --- a/src/services/ProjectVariables.ts +++ b/src/services/ProjectVariables.ts @@ -1,5 +1,5 @@ import { ResourceVariables } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class ProjectVariables extends ResourceVariables { constructor(options: BaseModelContructorOptions) { diff --git a/src/services/Projects.ts b/src/services/Projects.ts index 40d4ff039..e043bb00e 100644 --- a/src/services/Projects.ts +++ b/src/services/Projects.ts @@ -1,152 +1,148 @@ -import Fs from 'fs'; -import Path from 'path'; +import FormData from 'form-data'; +import randomstring from 'randomstring'; import { BaseService, RequestHelper } from '../infrastructure'; -import { assertEventOptions } from './Events'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -/** TODO annotate options */ -type ProjectOptions = temporaryAny; +import { + PaginatedRequestOptions, + BaseRequestOptions, + EventOptions, + Sudo, + ProjectId, + UserId, + GroupId, + NamespaceId, +} from '@src/types'; class Projects extends BaseService { - all(options?: RequestOptions) { + all(options?: PaginatedRequestOptions) { return RequestHelper.get(this, 'projects', options); } - archive(projectId: ProjectId) { + archive(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.post(this, `projects/${pId}/archive`); + return RequestHelper.post(this, `projects/${pId}/archive`, options); } - /** - * @see https://docs.gitlab.com/ee/api/projects.html#create-project-for-user - */ - create(options: temporaryAny) { - const url = options.userId ? `projects/user/${encodeURIComponent(options.userId)}` : 'projects'; + + create({ userId, ...options }: { userId: UserId } & BaseRequestOptions) { + const url = userId ? `projects/user/${encodeURIComponent(userId)}` : 'projects'; return RequestHelper.post(this, url, options); } - edit(projectId: ProjectId, options: temporaryAny) { + edit(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.put(this, `projects/${pId}`, options); } - events(projectId: ProjectId, options: ProjectOptions) { - assertEventOptions(options.action, options.targetType); - + events(projectId: ProjectId, options?: BaseRequestOptions & EventOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/events`, options); } - fork(projectId: ProjectId, options: ProjectOptions) { + fork(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/fork`, options); } - forks(projectId: ProjectId, options: ProjectOptions) { + forks(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/forks`, options); } - languages(projectId: ProjectId) { + languages(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/languages`); + return RequestHelper.get(this, `projects/${pId}/languages`, options); } - mirrorPull(projectId: ProjectId) { + mirrorPull(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.post(this, `projects/${pId}/mirror/pull`); + return RequestHelper.post(this, `projects/${pId}/mirror/pull`, options); } - remove(projectId: ProjectId) { + remove(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.delete(this, `projects/${pId}`); + return RequestHelper.delete(this, `projects/${pId}`, options); } search(projectName: string) { return RequestHelper.get(this, 'projects', { search: projectName }); } - share(projectId: ProjectId, groupId: GroupId, groupAccess: GroupAccess, options: ProjectOptions) { + share(projectId: ProjectId, groupId: GroupId, groupAccess: number, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); - if (!groupId || !groupAccess) throw new Error('Missing required arguments'); - return RequestHelper.post(this, `projects/${pId}/share`, { groupId, groupAccess, ...options }); } - show(projectId: ProjectId, options: ProjectOptions) { + show(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}`, options); } - star(projectId: ProjectId) { + star(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.post(this, `projects/${pId}/star`); + return RequestHelper.post(this, `projects/${pId}/star`, options); } - statuses(projectId: ProjectId, sha: string, state: string, options: ProjectOptions) { + statuses(projectId: ProjectId, sha: string, state: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/statuses/${sha}`, { state, ...options }); } - transfer(projectId: ProjectId, namespace: string) { + transfer(projectId: ProjectId, namespaceId: NamespaceId) { const pId = encodeURIComponent(projectId); - return RequestHelper.put(this, `projects/${pId}/transfer`, { namespace }); + return RequestHelper.put(this, `projects/${pId}/transfer`, { namespace: namespaceId }); } - unarchive(projectId: ProjectId) { + unarchive(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.post(this, `projects/${pId}/unarchive`); + return RequestHelper.post(this, `projects/${pId}/unarchive`, options); } - unshare(projectId: ProjectId, groupId: GroupId) { + unshare(projectId: ProjectId, groupId: GroupId, options?: Sudo) { const [pId, gId] = [projectId, groupId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/share${gId}`); + return RequestHelper.delete(this, `projects/${pId}/share${gId}`, options); } - unstar(projectId: ProjectId) { + unstar(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.post(this, `projects/${pId}/unstar`); + return RequestHelper.post(this, `projects/${pId}/unstar`, options); } - updatePushRule(projectId: ProjectId, options: ProjectOptions) { + updatePushRule(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.put(this, `projects/${pId}/push_rule`, options); } - upload(projectId: ProjectId, filePath: string, { fileName = Path.basename(filePath) } = {}) { + upload(projectId, content, { fileName = randomstring(8) }: { fileName?: string }) { const pId = encodeURIComponent(projectId); - const file = Fs.readFileSync(filePath); + const form = new FormData(); - return RequestHelper.post( - this, - `projects/${pId}/uploads`, - { - file: { - value: file, - options: { - filename: fileName, - contentType: 'application/octet-stream', - }, + form.append(fileName, { + file: { + value: content, + options: { + filename: fileName, + contentType: 'application/octet-stream', }, }, - true, - ); + }); + + return RequestHelper.post(this, `projects/${pId}/uploads`, form); } } diff --git a/src/services/ProtectedBranches.ts b/src/services/ProtectedBranches.ts index 4ee9d0940..32e9e7f03 100644 --- a/src/services/ProtectedBranches.ts +++ b/src/services/ProtectedBranches.ts @@ -1,14 +1,14 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, ProjectId } from '@src/types'; class ProtectedBranches extends BaseService { - all(projectId: ProjectId, options: RequestOptions) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/protected_branches`, options); } - protect(projectId: ProjectId, branchName: string, options: RequestOptions) { + protect(projectId: ProjectId, branchName: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/protected_branches`, { @@ -17,16 +17,16 @@ class ProtectedBranches extends BaseService { }); } - show(projectId: ProjectId, branchName: string) { + show(projectId: ProjectId, branchName: string, options?: Sudo) { const [pId, bName] = [projectId, branchName].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/protected_branches/${bName}`); + return RequestHelper.get(this, `projects/${pId}/protected_branches/${bName}`, options); } - unprotect(projectId: ProjectId, branchName: string) { + unprotect(projectId: ProjectId, branchName: string, options?: Sudo) { const [pId, bName] = [projectId, branchName].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/protected_branches/${bName}`); + return RequestHelper.delete(this, `projects/${pId}/protected_branches/${bName}`, options); } } diff --git a/src/services/PushRule.ts b/src/services/PushRule.ts index 7ab12b764..fa0e1b85e 100644 --- a/src/services/PushRule.ts +++ b/src/services/PushRule.ts @@ -1,35 +1,38 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { BaseRequestOptions, Sudo, ProjectId } from '@src/types'; class PushRule extends BaseService { - create(projectId: ProjectId, options: RequestOptions) { + create(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/push_rule`, options); } - async edit(projectId: ProjectId, { upsert = false, ...options } = {}) { + edit( + projectId: ProjectId, + { upsert = false, ...options }: { upsert: boolean } & BaseRequestOptions, + ) { const pId = encodeURIComponent(projectId); - if (upsert) { - const pushRule = await this.show(projectId); + try { + return RequestHelper.put(this, `projects/${pId}/push_rule`, options); + } catch (e) { + if (e.message.includes('exist')) return this.create(projectId, options); - if (!pushRule) return this.create(projectId, options); + throw e; } - - return RequestHelper.put(this, `projects/${pId}/push_rule`, options); } - remove(projectId: ProjectId) { + remove(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.delete(this, `projects/${pId}/push_rule`); + return RequestHelper.delete(this, `projects/${pId}/push_rule`, options); } - show(projectId: ProjectId) { + show(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/push_rule`); + return RequestHelper.get(this, `projects/${pId}/push_rule`, options); } } diff --git a/src/services/Repositories.ts b/src/services/Repositories.ts index 9ba8ae88e..8fb7e8135 100644 --- a/src/services/Repositories.ts +++ b/src/services/Repositories.ts @@ -1,43 +1,42 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { BaseRequestOptions, Sudo, ProjectId } from '@src/types'; class Repositories extends BaseService { - compare(projectId: ProjectId, from: string, to: string) { + compare(projectId: ProjectId, from: string, to: string, options?: Sudo) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/compare`, { from, to, + ...options }); } - contributors(projectId: ProjectId) { + contributors(projectId: ProjectId, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/repository/contributors`); + return RequestHelper.get(this, `projects/${pId}/repository/contributors`, options); } - showArchive(projectId: ProjectId, { sha }: { sha: string }) { + showArchive(projectId: ProjectId, options?: { sha: string } & Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/repository/archive`, { - sha, - }); + return RequestHelper.get(this, `projects/${pId}/repository/archive`, options); } - showBlob(projectId: ProjectId, sha: string) { + showBlob(projectId: ProjectId, sha: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/repository/blobs/${sha}`); + return RequestHelper.get(this, `projects/${pId}/repository/blobs/${sha}`, options); } - showBlobRaw(projectId: ProjectId, sha: string) { + showBlobRaw(projectId: ProjectId, sha: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/repository/blobs/${sha}/raw`); + return RequestHelper.get(this, `projects/${pId}/repository/blobs/${sha}/raw`, options); } - tree(projectId: ProjectId, options: RequestOptions) { + tree(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/tree`, options); diff --git a/src/services/RepositoryFiles.ts b/src/services/RepositoryFiles.ts index ce0640675..d7120451d 100644 --- a/src/services/RepositoryFiles.ts +++ b/src/services/RepositoryFiles.ts @@ -1,26 +1,40 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { BaseRequestOptions, Sudo, ProjectId } from '@src/types'; class RepositoryFiles extends BaseService { - create(projectId: ProjectId, filePath: string, branch: string, options: RequestOptions) { + create( + projectId: ProjectId, + filePath: string, + branch: string, + content: string, + options?: BaseRequestOptions, + ) { const [pId, path] = [projectId, filePath].map(encodeURIComponent); return RequestHelper.post(this, `projects/${pId}/repository/files/${path}`, { branch, + content, ...options, }); } - edit(projectId: ProjectId, filePath: string, branch: string, options: RequestOptions) { + edit( + projectId: ProjectId, + filePath: string, + branch: string, + content: string, + options?: BaseRequestOptions, + ) { const [pId, path] = [projectId, filePath].map(encodeURIComponent); return RequestHelper.put(this, `projects/${pId}/repository/files/${path}`, { branch, + content, ...options, }); } - remove(projectId: ProjectId, filePath: string, branch: string, options: RequestOptions) { + remove(projectId: ProjectId, filePath: string, branch: string, options?: BaseRequestOptions) { const [pId, path] = [projectId, filePath].map(encodeURIComponent); return RequestHelper.delete(this, `projects/${pId}/repository/files/${path}`, { @@ -29,18 +43,22 @@ class RepositoryFiles extends BaseService { }); } - show(projectId: ProjectId, filePath: string, ref: string) { + show(projectId: ProjectId, filePath: string, ref: string, options?: Sudo) { const [pId, path] = [projectId, filePath].map(encodeURIComponent); return RequestHelper.get(this, `projects/${pId}/repository/files/${path}`, { ref, + ...options, }); } - showRaw(projectId: ProjectId, filePath: string, ref: string) { + showRaw(projectId: ProjectId, filePath: string, ref: string, options?: Sudo) { const [pId, path] = [projectId, filePath].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/repository/files/${path}/raw`, { ref }); + return RequestHelper.get(this, `projects/${pId}/repository/files/${path}/raw`, { + ref, + ...options, + }); } } diff --git a/src/services/Runners.ts b/src/services/Runners.ts index f063c09fc..cff6277b1 100644 --- a/src/services/Runners.ts +++ b/src/services/Runners.ts @@ -1,55 +1,51 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, ProjectId, RunnerId } from '@src/types'; -type RunnerId = string | number; -interface RunnersOptions { - projectId?: ProjectId; -} class Runners extends BaseService { - all({ projectId, ...options }: RunnersOptions = {}) { + all({ projectId, ...options }: { projectId: ProjectId } & PaginatedRequestOptions) { const url = projectId ? `projects/${encodeURIComponent(projectId)}/runners` : 'runners/all'; return RequestHelper.get(this, url, options); } - allOwned(options: RequestOptions) { + allOwned(options?: BaseRequestOptions) { return RequestHelper.get(this, 'runners', options); } - edit(runnerId: RunnerId, options: RequestOptions) { + edit(runnerId: RunnerId, options?: BaseRequestOptions) { const rId = encodeURIComponent(runnerId); return RequestHelper.put(this, `runners/${rId}`, options); } - enable(projectId: ProjectId, runnerId: RunnerId) { + enable(projectId: ProjectId, runnerId: RunnerId, options?: Sudo) { const [pId, rId] = [projectId, runnerId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/runners`, { runnerId: rId }); + return RequestHelper.post(this, `projects/${pId}/runners`, { runnerId: rId, ...options }); } - disable(projectId: ProjectId, runnerId: RunnerId) { + disable(projectId: ProjectId, runnerId: RunnerId, options?: Sudo) { const [pId, rId] = [projectId, runnerId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/runners/${rId}`); + return RequestHelper.delete(this, `projects/${pId}/runners/${rId}`, options); } - jobs(runnerId: RunnerId) { + jobs(runnerId: RunnerId, options?: Sudo) { const rId = encodeURIComponent(runnerId); - return RequestHelper.get(this, `runners/${rId}/jobs`); + return RequestHelper.get(this, `runners/${rId}/jobs`, options); } - remove(runnerId: RunnerId) { + remove(runnerId: RunnerId, options?: Sudo) { const rId = encodeURIComponent(runnerId); - return RequestHelper.delete(this, `runners/${rId}`); + return RequestHelper.delete(this, `runners/${rId}`, options); } - show(runnerId: RunnerId) { + show(runnerId: RunnerId, options?: Sudo) { const rId = encodeURIComponent(runnerId); - return RequestHelper.get(this, `runners/${rId}`); + return RequestHelper.get(this, `runners/${rId}`, options); } } diff --git a/src/services/Search.ts b/src/services/Search.ts index af9985c82..bcc7aed5f 100644 --- a/src/services/Search.ts +++ b/src/services/Search.ts @@ -1,11 +1,16 @@ import { BaseService, RequestHelper } from '../infrastructure'; +import { BaseRequestOptions, ProjectId, GroupId } from '@src/types'; -interface SearchOptions { - projectId: ProjectId; - groupId: string | number; -} class Search extends BaseService { - all(scope: string, search: string, { projectId, groupId }: SearchOptions) { + all( + scope: string, + search: string, + { + projectId, + groupId, + ...options + }: { projectId?: ProjectId; groupId?: GroupId } & BaseRequestOptions, + ) { let url = ''; if (projectId) { @@ -14,7 +19,7 @@ class Search extends BaseService { url += `groups/${encodeURIComponent(groupId)}/`; } - return RequestHelper.get(this, `${url}search`, { scope, search }); + return RequestHelper.get(this, `${url}search`, { scope, search, ...options }); } } diff --git a/src/services/Services.ts b/src/services/Services.ts index 5f7aae95c..fdc1e6aad 100644 --- a/src/services/Services.ts +++ b/src/services/Services.ts @@ -1,32 +1,23 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { BaseRequestOptions, Sudo, ProjectId, SupportedService } from '@src/types'; -type ServiceName = 'asana' | 'assembla' | 'bamboo' | 'bugzilla' | 'buildkite' | 'campfire' - | 'custom-issue-tracker' | 'drone-ci' | 'emails-on-push' | 'external-wiki' | 'flowdock' - | 'hangouts_chat' | 'hipchat' | 'irker' | 'jira' | 'kubernetes' | 'slack-slash-commands' - | 'slack' | 'mattermost-slash-commands' | 'packagist' | 'pipelines-email' | 'pivotaltracker' - | 'prometheus' | 'pushover' | 'redmine' | 'microsoft-teams' | 'mattermost' - | 'mattermost-slash-commands' | 'teamcity' | 'jenkins' | 'jenkins-deprecated' | 'mock-ci'; -/** - * @see https://docs.gitlab.com/ee/api/services.html - */ class Services extends BaseService { - edit(projectId: ProjectId, serviceName: ServiceName, options: RequestOptions) { + edit(projectId: ProjectId, serviceName: SupportedService, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.put(this, `projects/${pId}/services/${serviceName}`, options); } - remove(projectId: ProjectId, serviceName: ServiceName) { + remove(projectId: ProjectId, serviceName: SupportedService, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.delete(this, `projects/${pId}/services/${serviceName}`); + return RequestHelper.delete(this, `projects/${pId}/services/${serviceName}`, options); } - show(projectId: ProjectId, serviceName: ServiceName) { + show(projectId: ProjectId, serviceName: SupportedService, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/services/${serviceName}`); + return RequestHelper.get(this, `projects/${pId}/services/${serviceName}`, options); } } diff --git a/src/services/Snippets.ts b/src/services/Snippets.ts index 77d2693cf..8daa624fa 100644 --- a/src/services/Snippets.ts +++ b/src/services/Snippets.ts @@ -1,21 +1,32 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -type SnippetId = string | number; +import { + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + SnippetId, + SnippetVisibility, +} from '@src/types'; class Snippets extends BaseService { - all(options = { public: false }) { - const url = options.public ? 'snippets/public' : 'snippets'; + all({ public: p, ...options }: { public: boolean } & PaginatedRequestOptions) { + const url = p ? 'snippets/public' : 'snippets'; + return RequestHelper.get(this, url, options); } - content(snippetId: SnippetId) { + content(snippetId: SnippetId, options?: Sudo) { const sId = encodeURIComponent(snippetId); - return RequestHelper.get(this, `snippets/${sId}/raw`); + return RequestHelper.get(this, `snippets/${sId}/raw`, options); } - create(title: string, fileName: string, content: string, visibility: string, options = {}) { + create( + title: string, + fileName: string, + content: string, + visibility: SnippetVisibility, + options?: BaseRequestOptions, + ) { return RequestHelper.post(this, 'snippets', { title, fileName, @@ -25,28 +36,28 @@ class Snippets extends BaseService { }); } - edit(snippetId: SnippetId, options: RequestOptions) { + edit(snippetId: SnippetId, options?: BaseRequestOptions) { const sId = encodeURIComponent(snippetId); return RequestHelper.put(this, `snippets/${sId}`, options); } - remove(snippetId: SnippetId) { + remove(snippetId: SnippetId, options?: Sudo) { const sId = encodeURIComponent(snippetId); - return RequestHelper.delete(this, `snippets/${sId}`); + return RequestHelper.delete(this, `snippets/${sId}`, options); } - show(snippetId: SnippetId) { + show(snippetId: SnippetId, options?: Sudo) { const sId = encodeURIComponent(snippetId); - return RequestHelper.get(this, `snippets/${sId}`); + return RequestHelper.get(this, `snippets/${sId}`, options); } - userAgentDetails(snippetId: SnippetId) { + userAgentDetails(snippetId: SnippetId, options?: Sudo) { const sId = encodeURIComponent(snippetId); - return RequestHelper.get(this, `snippets/${sId}/user_agent_detail`); + return RequestHelper.get(this, `snippets/${sId}/user_agent_detail`, options); } } diff --git a/src/services/SystemHooks.ts b/src/services/SystemHooks.ts index fd58c8b9c..f323d77e1 100644 --- a/src/services/SystemHooks.ts +++ b/src/services/SystemHooks.ts @@ -1,30 +1,25 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, HookId } from '@src/types'; -export type HookId = string | number; class SystemHooks extends BaseService { - add(url: string, options: RequestOptions) { + add(url: string, options?: BaseRequestOptions) { return RequestHelper.post(this, 'hooks', { url, ...options }); } - all(options: RequestOptions) { + all(options?: PaginatedRequestOptions) { return RequestHelper.get(this, 'hooks', options); } - edit(hookId: HookId, url: string, options: RequestOptions) { + edit(hookId: HookId, url: string, options?: BaseRequestOptions) { const hId = encodeURIComponent(hookId); return RequestHelper.put(this, `hooks/${hId}`, { url, ...options }); } - remove( - // @ts-ignore 'projectId' is declared but its value is never read - projectId: ProjectId, - hookId: HookId, - ) { + remove(hookId: HookId, options?: Sudo) { const hId = encodeURIComponent(hookId); - return RequestHelper.delete(this, `hooks/${hId}`); + return RequestHelper.delete(this, `hooks/${hId}`, options); } } diff --git a/src/services/Tags.ts b/src/services/Tags.ts index 381b4ade9..d1fae474e 100644 --- a/src/services/Tags.ts +++ b/src/services/Tags.ts @@ -1,29 +1,29 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, ProjectId } from '@src/types'; class Tags extends BaseService { - all(projectId: ProjectId, options: RequestOptions) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/tags`, options); } - create(projectId: ProjectId, options: RequestOptions) { + create(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/repository/tags`, options); } - remove(projectId: ProjectId, tagName: string) { + remove(projectId: ProjectId, tagName: string, options?: Sudo) { const [pId, tId] = [projectId, tagName].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/repository/tags/${tId}`); + return RequestHelper.delete(this, `projects/${pId}/repository/tags/${tId}`, options); } - show(projectId: ProjectId, tagName: string) { + show(projectId: ProjectId, tagName: string, options?: Sudo) { const [pId, tId] = [projectId, tagName].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/repository/tags/${tId}`); + return RequestHelper.get(this, `projects/${pId}/repository/tags/${tId}`, options); } } diff --git a/src/services/Todos.ts b/src/services/Todos.ts index 4451264ef..b89f88696 100644 --- a/src/services/Todos.ts +++ b/src/services/Todos.ts @@ -1,26 +1,31 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; -import { MergeRequestId } from './MergeRequests'; +import { + PaginatedRequestOptions, + Sudo, + ProjectId, + TodoId, + MergeRequestId, +} from '@src/types'; -type TodoId = string | number; -interface TodosOptions { - todoId: TodoId; -} class Todos extends BaseService { - all(options: RequestOptions) { + all(options?: PaginatedRequestOptions) { return RequestHelper.get(this, 'todos', options); } - create(projectId: ProjectId, mergerequestId: MergeRequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - - return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/todo`); + create(projectId: ProjectId, mergerequestId: MergeRequestId, options?: Sudo) { + return RequestHelper.post( + this, + `projects/${projectId}/merge_requests/${mergerequestId}/todo`, + options, + ); } - done({ todoId }: TodosOptions) { - const tId = encodeURIComponent(todoId); + done({ todoId, ...options }: { todoId?: TodoId } & Sudo) { + let url = 'mark_as_done'; + + if (todoId) url = `${todoId}/${url}`; - return RequestHelper.delete(this, `todos/${tId}/mark_as_done`); + return RequestHelper.delete(this, `todos/${url}`, options); } } diff --git a/src/services/Triggers.ts b/src/services/Triggers.ts index 70b236444..d140da501 100644 --- a/src/services/Triggers.ts +++ b/src/services/Triggers.ts @@ -1,37 +1,41 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -type TriggerId = string | number; +import { + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + ProjectId, + TriggerId, +} from '@src/types'; class Triggers extends BaseService { - add(projectId: ProjectId, options: RequestOptions) { + add(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/triggers`, options); } - all(projectId: ProjectId) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/triggers`); + return RequestHelper.get(this, `projects/${pId}/triggers`, options); } - edit(projectId: ProjectId, triggerId: TriggerId, options: RequestOptions) { + edit(projectId: ProjectId, triggerId: TriggerId, options?: BaseRequestOptions) { const [pId, tId] = [projectId, triggerId].map(encodeURIComponent); return RequestHelper.put(this, `projects/${pId}/triggers/${tId}`, options); } - remove(projectId: ProjectId, triggerId: TriggerId) { + remove(projectId: ProjectId, triggerId: TriggerId, options?: Sudo) { const [pId, tId] = [projectId, triggerId].map(encodeURIComponent); - return RequestHelper.delete(this, `projects/${pId}/triggers/${tId}`); + return RequestHelper.delete(this, `projects/${pId}/triggers/${tId}`, options); } - show(projectId: ProjectId, triggerId: TriggerId) { + show(projectId: ProjectId, triggerId: TriggerId, options?: Sudo) { const [pId, tId] = [projectId, triggerId].map(encodeURIComponent); - return RequestHelper.get(this, `projects/${pId}/triggers/${tId}`); + return RequestHelper.get(this, `projects/${pId}/triggers/${tId}`, options); } } diff --git a/src/services/UserCustomAttributes.ts b/src/services/UserCustomAttributes.ts index 93dea4e5f..95e0ac4fe 100644 --- a/src/services/UserCustomAttributes.ts +++ b/src/services/UserCustomAttributes.ts @@ -1,8 +1,8 @@ import { ResourceCustomAttributes } from '../templates'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { BaseServiceOptions } from '@src/types'; class UserCustomAttributes extends ResourceCustomAttributes { - constructor(options: BaseModelContructorOptions) { + constructor(options: BaseServiceOptions) { super('users', options); } } diff --git a/src/services/UserEmails.ts b/src/services/UserEmails.ts index 0193644cc..ad50734d8 100644 --- a/src/services/UserEmails.ts +++ b/src/services/UserEmails.ts @@ -1,28 +1,30 @@ import { BaseService, RequestHelper } from '../infrastructure'; +import { PaginatedRequestOptions, BaseRequestOptions, UserId } from '@src/types'; -const url = (userId?: UserId) => (userId ? `users/${encodeURIComponent(userId)}/emails` : 'user/emails'); +const url = userId => (userId ? `users/${encodeURIComponent(userId)}/emails` : 'user/emails'); class UserEmails extends BaseService { - all({ userId }: UserIdOptions = {}) { - return RequestHelper.get(this, url(userId)); + all({ userId, ...options }: { userId?: UserId } & PaginatedRequestOptions = {}) { + return RequestHelper.get(this, url(userId), options); } - add(email: string, { userId }: UserIdOptions = {}) { + add(email, { userId, ...options }: { userId?: UserId } & BaseRequestOptions = {}) { return RequestHelper.post(this, url(userId), { email, + ...options, }); } - show(emailId: string) { + show(emailId, options?: BaseRequestOptions) { const eId = encodeURIComponent(emailId); - return RequestHelper.get(this, `user/emails/${eId}`); + return RequestHelper.get(this, `user/emails/${eId}`, options); } - remove(emailId: string, { userId }: UserIdOptions = {}) { + remove(emailId, { userId, ...options }: { userId?: UserId } & BaseRequestOptions = {}) { const eId = encodeURIComponent(emailId); - return RequestHelper.delete(this, `${url(userId)}/${eId}`); + return RequestHelper.delete(this, `${url(userId)}/${eId}`, options); } } diff --git a/src/services/UserGPGKeys.ts b/src/services/UserGPGKeys.ts index f0b5af932..e326d2a9d 100644 --- a/src/services/UserGPGKeys.ts +++ b/src/services/UserGPGKeys.ts @@ -1,29 +1,31 @@ import { BaseService, RequestHelper } from '../infrastructure'; +import { PaginatedRequestOptions, BaseRequestOptions, UserId } from '@src/types'; -const url = (userId?: UserId) => (userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'); +const url = userId => (userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'); class UserGPGKeys extends BaseService { - all({ userId }: UserIdOptions = {}) { - return RequestHelper.get(this, url(userId)); + all({ userId, ...options }: { userId?: UserId } & PaginatedRequestOptions = {}) { + return RequestHelper.get(this, url(userId), options); } - add(title: string, key: string, { userId }: UserIdOptions = {}) { + add(title, key, { userId, ...options }: { userId?: UserId } & BaseRequestOptions = {}) { return RequestHelper.post(this, url(userId), { title, key, + ...options, }); } - show(keyId: string, { userId }: UserIdOptions = {}) { + show(keyId, { userId, ...options }: { userId?: UserId } & BaseRequestOptions = {}) { const kId = encodeURIComponent(keyId); - return RequestHelper.get(this, `${url(userId)}/${kId}`); + return RequestHelper.get(this, `${url(userId)}/${kId}`, options); } - remove(keyId: string, { userId }: UserIdOptions = {}) { + remove(keyId, { userId, ...options }: { userId?: UserId } & BaseRequestOptions = {}) { const kId = encodeURIComponent(keyId); - return RequestHelper.delete(this, `${url(userId)}/${kId}`); + return RequestHelper.delete(this, `${url(userId)}/${kId}`, options); } } diff --git a/src/services/UserImpersonationTokens.ts b/src/services/UserImpersonationTokens.ts index bb6cea5d8..ba3ba38e5 100644 --- a/src/services/UserImpersonationTokens.ts +++ b/src/services/UserImpersonationTokens.ts @@ -1,43 +1,46 @@ import { BaseService, RequestHelper } from '../infrastructure'; - -type ImpersonationTokenId = string | number; +import { + PaginatedRequestOptions, + Sudo, + UserId, + ImpersonationTokenId, + ImpersonationTokenScope, +} from '@src/types'; class UserImpersonationTokens extends BaseService { - all(userId: UserId) { + all(userId: UserId, options?: PaginatedRequestOptions) { const uId = encodeURIComponent(userId); - return RequestHelper.get(this, `users/${uId}/impersonation_tokens`); + return RequestHelper.get(this, `users/${uId}/impersonation_tokens`, options); } - /** - * It creates a new impersonation token. Note that only administrators can do this. - * You are only able to create impersonation tokens to impersonate the user and perform - * both API calls and Git reads and writes. The user will not see these tokens - * in their profile settings page. - * @param userId UserId - * @param name The name of the impersonation token - * @param scopes The array of scopes of the impersonation token (api, read_user) - * @param expiresAt The expiration date of the impersonation token in ISO format (YYYY-MM-DD) - */ - add(userId: UserId, name: string, scopes: temporaryAny, expiresAt: string) { + + add( + userId: UserId, + name: string, + scopes: ImpersonationTokenScope, + expiresAt: string, + options?: Sudo, + ) { const uId = encodeURIComponent(userId); return RequestHelper.post(this, `users/${uId}/impersonation_tokens`, { name, expiresAt, scopes, + ...options, }); } - show(userId: UserId, tokenId: ImpersonationTokenId) { + show(userId: UserId, tokenId: ImpersonationTokenId, options?: Sudo) { const [uId, tId] = [userId, tokenId].map(encodeURIComponent); - return RequestHelper.get(this, `users/${uId}/impersonation_tokens/${tId}`); + return RequestHelper.get(this, `users/${uId}/impersonation_tokens/${tId}`, options); } - revoke(userId: UserId, tokenId: ImpersonationTokenId) { + revoke(userId: UserId, tokenId: ImpersonationTokenId, options?: Sudo) { const [uId, tId] = [userId, tokenId].map(encodeURIComponent); - return RequestHelper.delete(this, `users/${uId}/impersonation_tokens/${tId}`); + return RequestHelper.delete(this, `users/${uId}/impersonation_tokens/${tId}`, options); } } diff --git a/src/services/UserKeys.ts b/src/services/UserKeys.ts index 99a917b68..1fb6ced2b 100644 --- a/src/services/UserKeys.ts +++ b/src/services/UserKeys.ts @@ -1,31 +1,31 @@ import { BaseService, RequestHelper } from '../infrastructure'; +import { PaginatedRequestOptions, BaseRequestOptions, UserId } from '@src/types'; -const url = (userId?: string) => (userId ? `users/${encodeURIComponent(userId)}/keys` : 'user/keys'); +const url = (userId) => (userId ? `users/${encodeURIComponent(userId)}/keys` : 'user/keys'); -/** SSH key ID */ -export type KeyId = string; class UserKeys extends BaseService { - all({ userId }: UserIdOptions) { - return RequestHelper.get(this, url(userId)); + all({ userId, ...options }: { userId?: UserId } & PaginatedRequestOptions = {}) { + return RequestHelper.get(this, url(userId), options); } - /** Add SSH key for user */ - create(title: string, key: KeyId, { userId }: UserIdOptions = {}) { + + create(title, key, { userId, ...options }: { userId?: UserId } & BaseRequestOptions = {}) { return RequestHelper.post(this, url(userId), { title, key, + ...options }); } - show(keyId: KeyId) { + show(keyId, options?: BaseRequestOptions) { const kId = encodeURIComponent(keyId); - return RequestHelper.get(this, `user/keys/${kId}`); + return RequestHelper.get(this, `user/keys/${kId}`, options); } - remove(keyId: KeyId, { userId }: UserIdOptions = {}) { + remove(keyId, { userId, ...options }: { userId?: UserId } & BaseRequestOptions = {}) { const kId = encodeURIComponent(keyId); - return RequestHelper.delete(this, `${url(userId)}/${kId}`); + return RequestHelper.delete(this, `${url(userId)}/${kId}`, options); } } diff --git a/src/services/Users.ts b/src/services/Users.ts index 26c227b06..b6df5b8b5 100644 --- a/src/services/Users.ts +++ b/src/services/Users.ts @@ -1,79 +1,84 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { assertEventOptions, EventOptions } from './Events'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + UserId, + EventOptions, +} from '@src/types'; class Users extends BaseService { - all(options: RequestOptions) { + all(options?: PaginatedRequestOptions) { return RequestHelper.get(this, 'users', options); } - activities() { - return RequestHelper.get(this, 'users/activities'); + activities(options?: Sudo) { + return RequestHelper.get(this, 'users/activities', options); } - projects(userId: UserId) { + projects(userId: UserId, options?: Sudo) { const uId = encodeURIComponent(userId); - return RequestHelper.get(this, `users/${uId}/projects`); + return RequestHelper.get(this, `users/${uId}/projects`, options); } - block(userId: UserId) { + block(userId: UserId, options?: Sudo) { const uId = encodeURIComponent(userId); - return RequestHelper.post(this, `users/${uId}/block`); + return RequestHelper.post(this, `users/${uId}/block`, options); } - create(options: RequestOptions) { + create(options?: BaseRequestOptions) { return RequestHelper.post(this, 'users', options); } - current() { - return RequestHelper.get(this, 'user'); + current(options?: Sudo) { + return RequestHelper.get(this, 'user', options); } - edit(userId: UserId, options: RequestOptions) { + edit(userId: UserId, options?: BaseRequestOptions) { const uId = encodeURIComponent(userId); return RequestHelper.put(this, `users/${uId}`, options); } - events(userId: UserId, options: RequestOptions & EventOptions) { - assertEventOptions(options.action, options.targetType); - + events(userId: UserId, options?: BaseRequestOptions & EventOptions) { const uId = encodeURIComponent(userId); return RequestHelper.get(this, `users/${uId}/events`, options); } - session(email: string, password: string) { + session(email: string, password: string, options?: Sudo) { return RequestHelper.post(this, 'session', { email, password, + ...options, }); } - search(emailOrUsername: string) { + search(emailOrUsername: string, options?: Sudo) { return RequestHelper.get(this, 'users', { search: emailOrUsername, + ...options, }); } - show(userId: UserId, options: RequestOptions) { + show(userId: UserId, options?: BaseRequestOptions) { const uId = encodeURIComponent(userId); return RequestHelper.get(this, `users/${uId}`, options); } - remove(userId: UserId) { + remove(userId: UserId, options?: Sudo) { const uId = encodeURIComponent(userId); - return RequestHelper.delete(this, `users/${uId}`); + return RequestHelper.delete(this, `users/${uId}`, options); } - unblock(userId: UserId) { + unblock(userId: UserId, options?: Sudo) { const uId = encodeURIComponent(userId); - return RequestHelper.post(this, `users/${uId}/unblock`); + return RequestHelper.post(this, `users/${uId}/unblock`, options); } } diff --git a/src/services/Version.ts b/src/services/Version.ts index 92360ad76..e98719b5f 100644 --- a/src/services/Version.ts +++ b/src/services/Version.ts @@ -1,8 +1,9 @@ import { BaseService, RequestHelper } from '../infrastructure'; +import { Sudo } from '@src/types'; class Version extends BaseService { - show() { - return RequestHelper.get(this, 'version'); + show(options?: Sudo) { + return RequestHelper.get(this, 'version', options); } } diff --git a/src/services/Wikis.ts b/src/services/Wikis.ts index c57eeaa25..0adb375fd 100644 --- a/src/services/Wikis.ts +++ b/src/services/Wikis.ts @@ -1,35 +1,35 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { PaginatedRequestOptions, BaseRequestOptions, Sudo, ProjectId } from '@src/types'; class Wikis extends BaseService { - all(projectId: ProjectId, options: RequestOptions) { + all(projectId: ProjectId, options?: PaginatedRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/wikis`, options); } - create(projectId: ProjectId, options: RequestOptions) { + create(projectId: ProjectId, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/wikis`, options); } - edit(projectId: ProjectId, slug: string, options: RequestOptions) { + edit(projectId: ProjectId, slug: string, options?: BaseRequestOptions) { const pId = encodeURIComponent(projectId); return RequestHelper.put(this, `projects/${pId}/wikis/${slug}`, options); } - show(projectId: ProjectId, slug: string) { + show(projectId: ProjectId, slug: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.get(this, `projects/${pId}/wikis/${slug}`); + return RequestHelper.get(this, `projects/${pId}/wikis/${slug}`, options); } - remove(projectId: ProjectId, slug: string) { + remove(projectId: ProjectId, slug: string, options?: Sudo) { const pId = encodeURIComponent(projectId); - return RequestHelper.delete(this, `projects/${pId}/wikis/${slug}`); + return RequestHelper.delete(this, `projects/${pId}/wikis/${slug}`, options); } } diff --git a/src/templates/ResourceAccessRequests.ts b/src/templates/ResourceAccessRequests.ts index 57266ccd3..3964353f2 100644 --- a/src/templates/ResourceAccessRequests.ts +++ b/src/templates/ResourceAccessRequests.ts @@ -1,23 +1,16 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; - -export const ACCESS_LEVELS = { - GUEST: 10, - REPORTER: 20, - DEVELOPER: 30, - MASTER: 40, - OWNER: 50, -}; +import { + BaseServiceOptions, + Sudo, + ResourceType, + ResourceId, + UserId, + AccessLevel, +} from '@src/types'; class ResourceAccessRequests extends BaseService { - protected ACCESS_LEVELS: typeof ACCESS_LEVELS; - - constructor(resourceType: string, baseParams: BaseModelContructorOptions) { - super(baseParams); - - this.url = URLJoin(this.url, resourceType); - this.ACCESS_LEVELS = ACCESS_LEVELS; + constructor(resourceType: ResourceType, options: BaseServiceOptions) { + super({ url: resourceType, ...options }); } all(resourceId: ResourceId) { @@ -32,7 +25,11 @@ class ResourceAccessRequests extends BaseService { return RequestHelper.post(this, `${rId}/access_requests`); } - approve(resourceId: ResourceId, userId: UserId, { accessLevel = 30 }) { + approve( + resourceId: ResourceId, + userId: UserId, + { accessLevel }: { accessLevel: AccessLevel } & Sudo, + ) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); return RequestHelper.post(this, `${rId}/access_requests/${uId}/approve`, { diff --git a/src/templates/ResourceAwardEmojis.ts b/src/templates/ResourceAwardEmojis.ts index d85aa203a..f0f5cdeb2 100644 --- a/src/templates/ResourceAwardEmojis.ts +++ b/src/templates/ResourceAwardEmojis.ts @@ -1,64 +1,89 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + BaseServiceOptions, + PaginatedRequestOptions, + Sudo, + ProjectId, + ResourceId, + ResourceType, + NoteId, + AwardId, +} from '@src/types'; -function url( - projectId: ProjectId, - resourceType: ResourceType, - resourceId: ResourceId, - noteId: NoteId, -) { +function url(projectId, resourceType, resourceId, awardId, noteId) { const [pId, rId] = [projectId, resourceId].map(encodeURIComponent); - let output = `${pId}/${resourceType}/${rId}/`; + const output = [pId, resourceType, rId]; - if (noteId) { - output += `notes/${encodeURIComponent(noteId)}/`; - } + if (noteId) output.push('notes', encodeURIComponent(noteId)); + + output.push(encodeURIComponent('award_emoji')); - output += 'award_emoji'; + if (awardId) output.push(encodeURIComponent(awardId)); - return output; + return output.join('/'); } class ResourceAwardsEmojis extends BaseService { - protected resourceType: temporaryAny; + protected resourceType: string; - constructor(resourceType: string, baseParams: BaseModelContructorOptions) { - super(baseParams); + constructor(resourceType: ResourceType, options: BaseServiceOptions) { + super({ url: 'projects', ...options }); - this.url = URLJoin(this.url, 'projects'); this.resourceType = resourceType; } - all(projectId: ProjectId, resourceId: ResourceId, options: RequestOptions, noteId: NoteId) { - return RequestHelper.get(this, url(projectId, this.resourceType, resourceId, noteId), options); + all( + projectId: ProjectId, + resourceId: ResourceId, + noteId: NoteId, + options?: PaginatedRequestOptions, + ) { + return RequestHelper.get( + this, + url(projectId, this.resourceType, resourceId, null, noteId), + options, + ); } - award(projectId: ProjectId, resourceId: ResourceId, name: string, noteId: NoteId) { - return RequestHelper.post(this, url(projectId, this.resourceType, resourceId, noteId), { + award( + projectId: ProjectId, + resourceId: ResourceId, + name: string, + noteId: NoteId, + options?: Sudo, + ) { + return RequestHelper.post(this, url(projectId, this.resourceType, resourceId, null, noteId), { name, + ...options, }); } remove( projectId: ProjectId, resourceId: ResourceId, - // @ts-ignore 'awardId' is declared but its value is never read - awardId: string | number, + awardId: AwardId, noteId: NoteId, + options?: Sudo, ) { - return RequestHelper.delete(this, url(projectId, this.resourceType, resourceId, noteId)); + return RequestHelper.delete( + this, + url(projectId, this.resourceType, resourceId, awardId, noteId), + options, + ); } show( projectId: ProjectId, resourceId: ResourceId, - // @ts-ignore 'awardId' is declared but its value is never read - awardId: string | number, + awardId: AwardId, noteId: NoteId, + options?: Sudo, ) { - return RequestHelper.get(this, url(projectId, this.resourceType, resourceId, noteId)); + return RequestHelper.get( + this, + url(projectId, this.resourceType, resourceId, awardId, noteId), + options, + ); } } diff --git a/src/templates/ResourceBadges.ts b/src/templates/ResourceBadges.ts index 421835280..5850ca318 100644 --- a/src/templates/ResourceBadges.ts +++ b/src/templates/ResourceBadges.ts @@ -1,50 +1,53 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + BaseServiceOptions, + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + ResourceId, + ResourceType, + BadgeId, +} from '@src/types'; -export type BadgeId = string | number; class ResourceBadges extends BaseService { - constructor(resourceType: string, baseParams: BaseModelContructorOptions) { - super(baseParams); - - this.url = URLJoin(this.url, resourceType); + constructor(resourceType: ResourceType, options: BaseServiceOptions) { + super({ url: resourceType, ...options }); } - add(resourceId: ResourceId, options: RequestOptions) { + add(resourceId: ResourceId, options?: BaseRequestOptions) { const rId = encodeURIComponent(resourceId); return RequestHelper.post(this, `${rId}/badges`, options); } - all(resourceId: ResourceId, options: RequestOptions) { + all(resourceId: ResourceId, options?: PaginatedRequestOptions) { const rId = encodeURIComponent(resourceId); return RequestHelper.get(this, `${rId}/badges`, options); } - edit(resourceId: ResourceId, badgeId: BadgeId, options: RequestOptions) { + edit(resourceId: ResourceId, badgeId: BadgeId, options?: BaseRequestOptions) { const [rId, bId] = [resourceId, badgeId].map(encodeURIComponent); return RequestHelper.put(this, `${rId}/badges/${bId}`, options); } - preview(resourceId: ResourceId, linkUrl: string, imageUrl: string) { + preview(resourceId: ResourceId, linkUrl: string, imageUrl: string, options?: Sudo) { const rId = encodeURIComponent(resourceId); - return RequestHelper.get(this, `${rId}/badges/render`, { linkUrl, imageUrl }); + return RequestHelper.get(this, `${rId}/badges/render`, { linkUrl, imageUrl, ...options }); } - remove(resourceId: ResourceId, badgeId: BadgeId) { + remove(resourceId: ResourceId, badgeId: BadgeId, options?: Sudo) { const [rId, bId] = [resourceId, badgeId].map(encodeURIComponent); - return RequestHelper.delete(this, `${rId}/badges/${bId}`); + return RequestHelper.delete(this, `${rId}/badges/${bId}`, options); } - show(resourceId: ResourceId, badgeId: BadgeId) { + show(resourceId: ResourceId, badgeId: BadgeId, options?: Sudo) { const [rId, bId] = [resourceId, badgeId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/badges/${bId}`); + return RequestHelper.get(this, `${rId}/badges/${bId}`, options); } } diff --git a/src/templates/ResourceCustomAttributes.ts b/src/templates/ResourceCustomAttributes.ts index eb58d6a0d..a89b79545 100644 --- a/src/templates/ResourceCustomAttributes.ts +++ b/src/templates/ResourceCustomAttributes.ts @@ -1,39 +1,43 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; +import { + BaseServiceOptions, + PaginatedRequestOptions, + Sudo, + ResourceId, + ResourceType, + CustomAttributeId, +} from '@src/types'; -export type CustomAttributeId = string | number; class ResourceCustomAttributes extends BaseService { - constructor(resourceType: string, baseParams: BaseModelContructorOptions) { - super(baseParams); - - this.url = URLJoin(this.url, resourceType); + constructor(resourceType: ResourceType, options: BaseServiceOptions) { + super({ url: resourceType, ...options }); } - all(resourceId: ResourceId) { + all(resourceId: ResourceId, options?: PaginatedRequestOptions) { const rId = encodeURIComponent(resourceId); - return RequestHelper.get(this, `${rId}/custom_attributes`); + return RequestHelper.get(this, `${rId}/custom_attributes`, options); } - set(resourceId: ResourceId, customAttributeId: CustomAttributeId, value: string) { + set(resourceId: ResourceId, customAttributeId: CustomAttributeId, value: string, options?: Sudo) { const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); return RequestHelper.put(this, `${rId}/custom_attributes/${cId}`, { value, + ...options, }); } - remove(resourceId: ResourceId, customAttributeId: CustomAttributeId) { + remove(resourceId: ResourceId, customAttributeId: CustomAttributeId, options?: Sudo) { const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); - return RequestHelper.delete(this, `${rId}/custom_attributes/${cId}`); + return RequestHelper.delete(this, `${rId}/custom_attributes/${cId}`, options); } - show(resourceId: ResourceId, customAttributeId: CustomAttributeId) { + show(resourceId: ResourceId, customAttributeId: CustomAttributeId, options?: Sudo) { const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/custom_attributes/${cId}`); + return RequestHelper.get(this, `${rId}/custom_attributes/${cId}`, options); } } diff --git a/src/templates/ResourceDiscussions.ts b/src/templates/ResourceDiscussions.ts index 00c4e22dd..164feb261 100644 --- a/src/templates/ResourceDiscussions.ts +++ b/src/templates/ResourceDiscussions.ts @@ -1,77 +1,120 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + PaginatedRequestOptions, + BaseRequestOptions, + BaseServiceOptions, + Sudo, + ResourceId, + ResourceType, + NoteId, + DiscussionId, +} from '@src/types'; -export type DiscussiodId = string | number; class ResourceDiscussions extends BaseService { - protected resource2Type: string; + protected resource2Type: ResourceType; - constructor(resourceType: string, resource2Type: string, baseParams: BaseModelContructorOptions) { - super(baseParams); + constructor( + resourceType: ResourceType, + resource2Type: ResourceType, + options: BaseServiceOptions, + ) { + super({ url: resourceType, ...options }); - this.url = URLJoin(this.url, resourceType); this.resource2Type = resource2Type; } addNote( - resourceId: string, - resource2Id: string, - discussiodId: string, + resourceId: ResourceId, + resource2Id: ResourceId, + discussionId: DiscussionId, noteId: NoteId, - options: RequestOptions, + content: string, + options?: BaseRequestOptions, ) { - if (!options.body) throw new Error('Missing required property: body'); + if (!content) throw new Error('Missing required content argument'); - const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussiodId, noteId] - .map(encodeURIComponent); + const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussionId, noteId].map( + encodeURIComponent, + ); - return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`, options); + return RequestHelper.put( + this, + `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`, + { body: content, ...options }, + ); } - all(resourceId: ResourceId, resource2Id: Resource2Id, options: RequestOptions) { + all(resourceId: ResourceId, resource2Id: ResourceId, options?: PaginatedRequestOptions) { const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/discussions`, options); } - create(resourceId: ResourceId, resource2Id: Resource2Id, options: RequestOptions) { - if (!options.body) throw new Error('Missing required property: body'); + create( + resourceId: ResourceId, + resource2Id: ResourceId, + content: string, + options?: BaseRequestOptions, + ) { + if (!content) throw new Error('Missing required content argument'); const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); - return RequestHelper.post(this, `${rId}/${this.resource2Type}/${r2Id}/discussions`, options); + return RequestHelper.post(this, `${rId}/${this.resource2Type}/${r2Id}/discussions`, { + body: content, + ...options, + }); } editNote( resourceId: ResourceId, - resource2Id: Resource2Id, - discussiodId: DiscussiodId, + resource2Id: ResourceId, + discussionId: DiscussionId, noteId: NoteId, - options: RequestOptions, + options?: BaseRequestOptions, ) { - const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussiodId, noteId] - .map(encodeURIComponent); - - return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`, { body: options }); + const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussionId, noteId].map( + encodeURIComponent, + ); + + return RequestHelper.put( + this, + `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`, + { body: options }, + ); } removeNote( resourceId: ResourceId, - resource2Id: Resource2Id, - discussiodId: DiscussiodId, + resource2Id: ResourceId, + discussionId: DiscussionId, noteId: NoteId, + options?: Sudo, ) { - const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussiodId, noteId] - .map(encodeURIComponent); - - return RequestHelper.delete(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`); + const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussionId, noteId].map( + encodeURIComponent, + ); + + return RequestHelper.delete( + this, + `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`, + options, + ); } - show(resourceId: ResourceId, resource2Id: Resource2Id, discussiodId: DiscussiodId) { - const [rId, r2Id, dId] = [resourceId, resource2Id, discussiodId].map(encodeURIComponent); + show( + resourceId: ResourceId, + resource2Id: ResourceId, + discussionId: DiscussionId, + options?: Sudo, + ) { + const [rId, r2Id, dId] = [resourceId, resource2Id, discussionId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}`); + return RequestHelper.get( + this, + `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}`, + options, + ); } } diff --git a/src/templates/ResourceIssueBoards.ts b/src/templates/ResourceIssueBoards.ts index 58d6e62cb..bbbf4110b 100644 --- a/src/templates/ResourceIssueBoards.ts +++ b/src/templates/ResourceIssueBoards.ts @@ -1,78 +1,82 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; -import { RequestOptions } from '../infrastructure/RequestHelper'; - -export type BoardId = string | number; -export type ListId = string | number; -export type LabelId = string | number; -/** The position of the list */ -export type Position = string | number; -class ResourceIssueBoards extends BaseService { - constructor(resourceType: string, baseParams: BaseModelContructorOptions) { - super(baseParams); +import { + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + ResourceId, + ResourceType, + LabelId, +} from '@src/types'; - this.url = URLJoin(this.url, resourceType); +class ResourceIssueBoards extends BaseService { + constructor(resourceType: ResourceType, options) { + super({ url: resourceType, ...options }); } - all(resourceId: ResourceId, options: RequestOptions) { + all(resourceId: ResourceId, options?: PaginatedRequestOptions) { const rId = encodeURIComponent(resourceId); return RequestHelper.get(this, `${rId}/boards`, options); } - create(resourceId: ResourceId, name: string) { + create(resourceId: ResourceId, name: string, options?: Sudo) { const rId = encodeURIComponent(resourceId); - return RequestHelper.post(this, `${rId}/boards`, { name }); + return RequestHelper.post(this, `${rId}/boards`, { name, ...options }); } - createList(resourceId: ResourceId, boardId: BoardId, labelId: LabelId) { + createList(resourceId: ResourceId, boardId: number, labelId: LabelId, options?: Sudo) { const [rId, bId] = [resourceId, boardId].map(encodeURIComponent); - return RequestHelper.post(this, `${rId}/boards/${bId}/lists`, { labelId }); + return RequestHelper.post(this, `${rId}/boards/${bId}/lists`, { labelId, ...options }); } - edit(resourceId: ResourceId, boardId: BoardId, options: RequestOptions) { + edit(resourceId: ResourceId, boardId: number, options?: BaseRequestOptions) { const [rId, bId] = [resourceId, boardId].map(encodeURIComponent); return RequestHelper.put(this, `${rId}/boards/${bId}`, options); } - editList(resourceId: ResourceId, boardId: BoardId, listId: ListId, position: Position) { + editList( + resourceId: ResourceId, + boardId: number, + listId: number, + position: number, + options?: Sudo, + ) { const [rId, bId, lId] = [resourceId, boardId, listId].map(encodeURIComponent); - return RequestHelper.put(this, `${rId}/boards/${bId}/lists/${lId}`, { position }); + return RequestHelper.put(this, `${rId}/boards/${bId}/lists/${lId}`, { position, ...options }); } - lists(resourceId: ResourceId, boardId: BoardId) { + lists(resourceId: ResourceId, boardId: number, options?: Sudo) { const [rId, bId] = [resourceId, boardId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/boards/${bId}/lists`); + return RequestHelper.get(this, `${rId}/boards/${bId}/lists`, options); } - remove(resourceId: ResourceId, boardId: BoardId) { + remove(resourceId: ResourceId, boardId: number, options?: Sudo) { const [rId, bId] = [resourceId, boardId].map(encodeURIComponent); - return RequestHelper.delete(this, `${rId}/boards/${bId}`); + return RequestHelper.delete(this, `${rId}/boards/${bId}`, options); } - removeList(resourceId: ResourceId, boardId: BoardId, listId: ListId) { + removeList(resourceId: ResourceId, boardId: number, listId: number, options?: Sudo) { const [rId, bId, lId] = [resourceId, boardId, listId].map(encodeURIComponent); - return RequestHelper.delete(this, `${rId}/boards/${bId}/lists/${lId}`); + return RequestHelper.delete(this, `${rId}/boards/${bId}/lists/${lId}`, options); } - show(resourceId: ResourceId, boardId: BoardId) { + show(resourceId: ResourceId, boardId: number, options?: Sudo) { const [rId, bId] = [resourceId, boardId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/boards/${bId}`); + return RequestHelper.get(this, `${rId}/boards/${bId}`, options); } - showList(resourceId: ResourceId, boardId: BoardId, listId: ListId) { + showList(resourceId: ResourceId, boardId: number, listId: number, options?: Sudo) { const [rId, bId, lId] = [resourceId, boardId, listId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/boards/${bId}/lists/${lId}`); + return RequestHelper.get(this, `${rId}/boards/${bId}/lists/${lId}`, options); } } diff --git a/src/templates/ResourceMembers.ts b/src/templates/ResourceMembers.ts index 6eb2f8ec6..7faf94663 100644 --- a/src/templates/ResourceMembers.ts +++ b/src/templates/ResourceMembers.ts @@ -1,26 +1,35 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + BaseServiceOptions, + PaginatedRequestOptions, + BaseRequestOptions, + AccessLevel, + Sudo, + ResourceId, + ResourceType, + UserId, +} from '@src/types'; -/** A valid access level */ -export type AccessLevel = number; class ResourceMembers extends BaseService { - constructor(resourceType: string, baseParams: BaseModelContructorOptions) { - super(baseParams); - - this.url = URLJoin(this.url, resourceType); + constructor(resourceType: ResourceType, options: BaseServiceOptions) { + super({ url: resourceType, ...options }); } - all(resourceId: ResourceId, includeInherited = false, options = {}) { + all(resourceId: ResourceId, includeInherited = false, options?: PaginatedRequestOptions) { const rId = encodeURIComponent(resourceId); + const url = [rId, 'members']; - const url = includeInherited ? `${rId}/members/all` : `${rId}/members`; + if (includeInherited) url.push('all'); - return RequestHelper.get(this, url, options); + return RequestHelper.get(this, url.join('/'), { options }); } - add(resourceId: ResourceId, userId: UserId, accessLevel: AccessLevel, options: RequestOptions) { + add( + resourceId: ResourceId, + userId: UserId, + accessLevel: AccessLevel, + options?: BaseRequestOptions, + ) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); return RequestHelper.post(this, `${rId}/members`, { @@ -30,7 +39,12 @@ class ResourceMembers extends BaseService { }); } - edit(resourceId: ResourceId, userId: UserId, accessLevel: AccessLevel, options: RequestOptions) { + edit( + resourceId: ResourceId, + userId: UserId, + accessLevel: AccessLevel, + options?: BaseRequestOptions, + ) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); return RequestHelper.put(this, `${rId}/members/${uId}`, { @@ -39,16 +53,16 @@ class ResourceMembers extends BaseService { }); } - show(resourceId: ResourceId, userId: UserId) { + show(resourceId: ResourceId, userId: UserId, options?: Sudo) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/members/${uId}`); + return RequestHelper.get(this, `${rId}/members/${uId}`, options); } - remove(resourceId: ResourceId, userId: UserId) { + remove(resourceId: ResourceId, userId: UserId, options?: Sudo) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.delete(this, `${rId}/members/${uId}`); + return RequestHelper.delete(this, `${rId}/members/${uId}`, options); } } diff --git a/src/templates/ResourceMilestones.ts b/src/templates/ResourceMilestones.ts index 8c92a853c..87ac7959f 100644 --- a/src/templates/ResourceMilestones.ts +++ b/src/templates/ResourceMilestones.ts @@ -1,50 +1,53 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + BaseServiceOptions, + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + ResourceId, + ResourceType, + MilestoneId, +} from '@src/types'; -export type MilestoneId = string; class ResourceMilestones extends BaseService { - constructor(resourceType: string, baseParams: BaseModelContructorOptions) { - super(baseParams); - - this.url = URLJoin(this.url, resourceType); + constructor(resourceType: ResourceType, options: BaseServiceOptions) { + super({ url: resourceType, ...options }); } - all(resourceId: ResourceId, options: RequestOptions) { + all(resourceId: ResourceId, options?: PaginatedRequestOptions) { const rId = encodeURIComponent(resourceId); return RequestHelper.get(this, `${rId}/milestones`, options); } - create(resourceId: ResourceId, title: string, options: RequestOptions) { + create(resourceId: ResourceId, title: string, options?: BaseRequestOptions) { const rId = encodeURIComponent(resourceId); return RequestHelper.post(this, `${rId}/milestones`, { title, ...options }); } - edit(resourceId: ResourceId, milestoneId: MilestoneId, options: RequestOptions) { + edit(resourceId: ResourceId, milestoneId: MilestoneId, options?: BaseRequestOptions) { const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); return RequestHelper.put(this, `${rId}/milestones/${mId}`, options); } - issues(resourceId: ResourceId, milestoneId: MilestoneId) { + issues(resourceId: ResourceId, milestoneId: MilestoneId, options?: Sudo) { const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/milestones/${mId}/issues`); + return RequestHelper.get(this, `${rId}/milestones/${mId}/issues`, options); } - mergeRequests(resourceId: ResourceId, milestoneId: MilestoneId) { + mergeRequests(resourceId: ResourceId, milestoneId: MilestoneId, options?: Sudo) { const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/milestones/${mId}/merge_requests`); + return RequestHelper.get(this, `${rId}/milestones/${mId}/merge_requests`, options); } - show(resourceId: ResourceId, milestoneId: MilestoneId) { + show(resourceId: ResourceId, milestoneId: MilestoneId, options?: Sudo) { const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/milestones/${mId}`); + return RequestHelper.get(this, `${rId}/milestones/${mId}`, options); } } diff --git a/src/templates/ResourceNotes.ts b/src/templates/ResourceNotes.ts index 5000bf405..026b9dc95 100644 --- a/src/templates/ResourceNotes.ts +++ b/src/templates/ResourceNotes.ts @@ -1,50 +1,72 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + BaseServiceOptions, + PaginatedRequestOptions, + BaseRequestOptions, + Sudo, + ResourceId, + ResourceType, + NoteId, +} from '@src/types'; class ResourceNotes extends BaseService { protected resource2Type: string; - constructor(resourceType: string, resource2Type: string, baseParams: BaseModelContructorOptions) { - super(baseParams); + constructor( + resourceType: ResourceType, + resource2Type: ResourceType, + options: BaseServiceOptions, + ) { + super({ url: resourceType, ...options }); - this.url = URLJoin(this.url, resourceType); this.resource2Type = resource2Type; } - all(resourceId: ResourceId, resource2Id: Resource2Id, options: RequestOptions) { + all(resourceId: ResourceId, resource2Id: ResourceId, options?: PaginatedRequestOptions) { const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/notes`, options); } - create(resourceId: ResourceId, resource2Id: Resource2Id, options: RequestOptions) { - if (!options.body) throw new Error('Missing required property: body'); - + create( + resourceId: ResourceId, + resource2Id: ResourceId, + body: string, + options?: BaseRequestOptions, + ) { const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); - return RequestHelper.post(this, `${rId}/${this.resource2Type}/${r2Id}/notes`, options); + return RequestHelper.post(this, `${rId}/${this.resource2Type}/${r2Id}/notes`, { + body, + ...options, + }); } - edit(resourceId: ResourceId, resource2Id: Resource2Id, noteId: NoteId, options: RequestOptions) { - if (!options.body) throw new Error('Missing required property: body'); - + edit( + resourceId: ResourceId, + resource2Id: ResourceId, + noteId: NoteId, + body: string, + options?: BaseRequestOptions, + ) { const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); - return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options); + return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, { + body, + ...options, + }); } - remove(resourceId: ResourceId, resource2Id: Resource2Id, noteId: NoteId) { + remove(resourceId: ResourceId, resource2Id: ResourceId, noteId: NoteId, options?: Sudo) { const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); - return RequestHelper.delete(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`); + return RequestHelper.delete(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options); } - show(resourceId: ResourceId, resource2Id: Resource2Id, noteId: NoteId) { + show(resourceId: ResourceId, resource2Id: ResourceId, noteId: NoteId, options?: Sudo) { const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); - return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`); + return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options); } } diff --git a/src/templates/ResourceTemplates.ts b/src/templates/ResourceTemplates.ts index 07a710226..751eb8837 100644 --- a/src/templates/ResourceTemplates.ts +++ b/src/templates/ResourceTemplates.ts @@ -1,23 +1,25 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + BaseServiceOptions, + PaginatedRequestOptions, + Sudo, + ResourceId, + ResourceType, +} from '@src/types'; class ResourceTemplates extends BaseService { - constructor(resourceType: string, baseParams: BaseModelContructorOptions) { - super(baseParams); - - this.url = URLJoin(this.url, 'templates', resourceType); + constructor(resourceType: ResourceType, options: BaseServiceOptions) { + super({ url: ['templates', resourceType].join('/'), ...options }); } - all(options: RequestOptions) { + all(options?: PaginatedRequestOptions) { return RequestHelper.get(this, '', options); } - show(resourceId: ResourceId) { + show(resourceId: ResourceId, options?: Sudo) { const rId = encodeURIComponent(resourceId); - return RequestHelper.post(this, `${rId}`); + return RequestHelper.post(this, `${rId}`, options); } } diff --git a/src/templates/ResourceVariables.ts b/src/templates/ResourceVariables.ts index b9012aa42..913862dbf 100644 --- a/src/templates/ResourceVariables.ts +++ b/src/templates/ResourceVariables.ts @@ -1,6 +1,12 @@ import { BaseService, RequestHelper } from '../infrastructure'; -import { BaseModelContructorOptions } from '../infrastructure/BaseService'; -import { RequestOptions } from '../infrastructure/RequestHelper'; +import { + BaseServiceOptions, + BaseRequestOptions, + PaginatedRequestOptions, + ResourceId, + ResourceType, + KeyId, +} from '@src/types'; class ResourceVariables extends BaseService { protected resourceType: ResourceType; diff --git a/src/types.d.ts b/src/types.d.ts index da6c054c7..9b5d83735 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1,68 +1,184 @@ -/// - -type temporaryAny = any; -type UserIdOptions = { userId?: string }; -type UserId = string; - -type ResourceType = string; // see if we can narrow the type to string literals -type ResourceId = string; // see if we can narrow the type to string literals -type Resource2Type = string; // see if we can narrow the type to string literals -type Resource2Id = string; // see if we can narrow the type to string literals - -type NoteId = string; // see if `| number` is a valid type -type ProjectId = string | number; -type KeyId = string; // see if `| number` is a valid type -type GroupId = string | number; -type PipelineScheduleId = string; - -type GroupAccess = temporaryAny; - -/** The duration in human format. e.g: 3h30m */ -type Duration = string; - -/** - * Encodes a text string as a valid component of a Uniform Resource Identifier (URI). - * @param uriComponent A value representing an encoded URI component. - */ -declare function encodeURIComponent(uriComponent: number | string): string; - -declare module 'request-promise-core/errors'; - -interface ObjectConstructor { - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param source The source object from which to copy properties. - */ - assign(target: T, source: U): T & U; - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param source1 The first source object from which to copy properties. - * @param source2 The second source object from which to copy properties. - */ - assign(target: T, source1: U, source2: V): T & U & V; - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param source1 The first source object from which to copy properties. - * @param source2 The second source object from which to copy properties. - * @param source3 The third source object from which to copy properties. - */ - assign( - target: T, - source1: U, - source2: V, - source3: W, - ): T & U & V & W; - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param sources One or more source objects from which to copy properties - */ - assign(target: any, ...sources: any[]): any; +// Overrides +declare global { + function encodeURIComponent(uriComponent: string | number | boolean): string; } + +// Global +export type ResourceType = string; +export type ResourceId = string | number; +export type AwardId = number; +export type BroadcastMessageId = number; +export type BadgeId = number; +export type BoardId = number; +export type CustomAttributeId = number; +export type DeploymentId = number; +export type DiscussionId = number; +export type EnvironmentId = number; +export type EpicId = number; +export type GeonodeId = number; +export type GroupId = string | number; +export type GroupProjectId = number; +export type HookId = number; +export type ImpersonationTokenId = number; +export type IssueId = number; +export type JobId = number; +export type LabelId = number; +export type KeyId = string; +export type NamespaceId = string | number; +export type MergeRequestId = number; +export type MilestoneId = number; +export type NoteId = number; +export type PipelineId = number; +export type PipelineScheduleId = number +export type ProjectId = string | number; +export type RunnerId = number; +export type SnippetId = number; +export type TodoId = number; +export type TriggerId = number; +export type VersionId = number; +export type UserId = number; + +export interface Sudo { + sudo?: string | number; +} + +// Base Service +export interface BaseServiceOptions extends Sudo { + oauthToken?: string; + token?: string; + host?: string; + url?: string; + version?: string; + rejectUnauthorized?: boolean; +} + +// RequestHelper +export interface DefaultRequestOptions extends Sudo { + body?: object; + query?: object; +} + +export interface BaseRequestOptions extends Sudo { + [key: string]: any; +} + +export interface PaginatedRequestOptions extends BaseRequestOptions { + showPagination?: boolean; + maxPages?: number; + page?: number; + perPage?: number; +} + +// Access Requests +export enum AccessLevel { + GUEST= 10, + REPORTER= 20, + DEVELOPER = 30, + MAINTAINER = 40, + OWNER = 50, +}; + +// Commits +export interface CommitAction { + /** The action to perform */ + action: 'create' | 'delete' | 'move' | 'update'; + /** Full path to the file. Ex. lib/class.rb */ + filePath: string; + /** Original full path to the file being moved.Ex.lib / class1.rb */ + previousPath?: string; + /** File content, required for all except delete. Optional for move */ + content?: string; + /** text or base64. text is default. */ + encoding?: string; + /** Last known file commit id. Will be only considered in update, move and delete actions. */ + lastCommitId?: string; +} + +// Events +export type EventAction = + | 'created' + | 'updated' + | 'closed' + | 'reopened' + | 'pushed' + | 'commented' + | 'merged' + | 'joined' + | 'left' + | 'destroyed' + | 'expired' + +export type EventTarget = + | 'issue', + | 'milestone', + | 'merge_request', + | 'note', + | 'project', + | 'snippet', + | 'user' + +export interface EventOptions { + action: EventAction, + targetType: EventTarget +} + +// Jobs +export type JobScope = + | 'created' + | 'pending' + | 'running' + | 'failed' + | 'success' + | 'canceled' + | 'skipped' + | 'manual' + +// Notification Settings Levels +export type NotificationSettingLevel = + | 'disabled' + | 'participating' + | 'watch' + | 'global' + | 'mention' + | 'custom' + +// Services +export type SupportedService = + |'asana' + | 'assembla' + | 'bamboo' + | 'bugzilla' + | 'buildkite' + | 'campfire' + | 'custom-issue-tracker' + | 'drone-ci' + | 'emails-on-push' + | 'external-wiki' + | 'flowdock' + | 'hangouts_chat' + | 'hipchat' + | 'irker' + | 'jira' + | 'kubernetes' + | 'slack-slash-commands' + | 'slack' + | 'mattermost-slash-commands' + | 'packagist' + | 'pipelines-email' + | 'pivotaltracker' + | 'prometheus' + | 'pushover' + | 'redmine' + | 'microsoft-teams' + | 'mattermost' + | 'mattermost-slash-commands' + | 'teamcity' + | 'jenkins' + | 'jenkins-deprecated' + | 'mock-ci'; + +// Snippets +export type SnippetVisibility = 'private' | 'public' | 'internal' + +// User Impersonation Tokens +export type ImpersonationTokenScope = 'api' | 'read_user' \ No newline at end of file diff --git a/test/tests/bundles/UsersBundle.ts b/test/tests/bundles/UsersBundle.ts index 75b58658f..891a1a73f 100644 --- a/test/tests/bundles/UsersBundle.ts +++ b/test/tests/bundles/UsersBundle.ts @@ -3,7 +3,14 @@ import * as Services from '../../../src/services'; test('All the correct service keys are included in the users bundle', async () => { const bundle = new UsersBundle({ token: 'test' }); - const services = ['Users', 'UserEmails', 'UserCustomAttributes', 'UserImpersonationTokens', 'UserKeys', 'UserGPGKeys']; + const services = [ + 'Users', + 'UserEmails', + 'UserCustomAttributes', + 'UserImpersonationTokens', + 'UserKeys', + 'UserGPGKeys' + ]; expect(Object.keys(bundle)).toEqual(expect.arrayContaining(services)); }); diff --git a/test/tests/infrastructure/BaseService.ts b/test/tests/infrastructure/BaseService.ts index 09cef8ff0..6515ca0a9 100644 --- a/test/tests/infrastructure/BaseService.ts +++ b/test/tests/infrastructure/BaseService.ts @@ -1,40 +1,40 @@ import { BaseService } from '../../../src/infrastructure'; describe('Creation of BaseService instance', () => { - test('Url defaults to https://gitlab.com/api/v4', async () => { + test('host defaults to https://gitlab.com/api/v4/', async () => { const service = new BaseService({ token: 'test' }); - expect(service.url).toBe('https://gitlab.com/api/v4'); + expect(service.url).toBe('https://gitlab.com/api/v4/'); }); - test('Use the Oauth Token when a user supplies both a Private Token and a Oauth Token', async () => { + test('Use the Oauth Token when a given both a Private Token and a Oauth Token', async () => { const service = new BaseService({ token: 'test', oauthToken: '1234' }); expect(service.headers['private-token']).toBeUndefined(); expect(service.headers.authorization).toBe('Bearer 1234'); }); - test('Custom url still appends api and version number to url', async () => { - const service = new BaseService({ url: 'https://testing.com', token: 'test' }); + test('Custom host still appends api and version number to host', async () => { + const service = new BaseService({ host: 'https://testing.com', token: 'test' }); - expect(service.url).toBe('https://testing.com/api/v4'); + expect(service.url).toBe('https://testing.com/api/v4/'); }); test('Oauth token adds to authorization header as a bearer token', async () => { - const service = new BaseService({ url: 'https://testing.com', oauthToken: '1234' }); + const service = new BaseService({ host: 'https://testing.com', oauthToken: '1234' }); expect(service.headers.authorization).toBe('Bearer 1234'); }); test('Private token adds to private-token header', async () => { - const service = new BaseService({ url: 'https://testing.com', token: '1234' }); + const service = new BaseService({ host: 'https://testing.com', token: '1234' }); expect(service.headers['private-token']).toBe('1234'); }); test('API version should be modified', async () => { - const service = new BaseService({ url: 'https://testing.com', token: '1234', version: 'v3' }); + const service = new BaseService({ host: 'https://testing.com', token: '1234', version: 'v3' }); - expect(service.url).toBe('https://testing.com/api/v3'); + expect(service.url).toBe('https://testing.com/api/v3/'); }); }); diff --git a/test/tests/infrastructure/RequestHelper.ts b/test/tests/infrastructure/RequestHelper.ts index 639ce4b13..fd72ab0ba 100644 --- a/test/tests/infrastructure/RequestHelper.ts +++ b/test/tests/infrastructure/RequestHelper.ts @@ -1,87 +1,76 @@ import { RequestHelper } from '../../../src/infrastructure'; +import Request from 'got'; -const mockService = { - url: 'testing', - headers: {}, - requester: { - get: () => ({ - body: { - prop1: 5, - prop2: 'test property', +const mockedGetBasic = () => ({ + body: { + prop1: 5, + prop2: 'test property', + }, + headers: { + 'X-Page': 1, + 'X-Total-Pages': 1, + }, +}); + +const mockedGetExtended = (url, { query = '' }) => { + const page1 = { + body: [ + { + prop1: 1, + prop2: 'test property1', }, - headers: { - 'X-Page': 1, - 'X-Total-Pages': 1, + { + prop1: 2, + prop2: 'test property2', }, - }), - }, -}; + ], + headers: { + link: `<'https://www.test.com/api/v3/projects/8?page=2&per_page=2>; rel='next', + <'https://www.test.com/api/v3/projects/8?page=1&per_page=2>; rel='first', + <'https://www.test.com/api/v3/projects/8?page=2&per_page=2>; rel='last'`, + 'x-next-page': 2, + 'x-page': 1, + 'x-per-page': 2, + 'x-prev-page': '', + 'x-total': 4, + 'x-total-pages': 2, + }, + }; -const mockService2 = { - url: 'testing', - headers: {}, - requester: { - get: ({ url, qs }) => { - let u = url; - - if (qs.page) u += `page=${qs.page}`; - - const page1 = { - body: [ - { - prop1: 1, - prop2: 'test property1', - }, - { - prop1: 2, - prop2: 'test property2', - }, - ], - headers: { - link: "<'https://www.test.com/api/v3/projects/8?page=2&per_page=2>; rel='next', <'https://www.test.com/api/v3/projects/8?page=1&per_page=2>; rel='first', <'https://www.test.com/api/v3/projects/8?page=2&per_page=2>; rel='last'", - 'x-next-page': 2, - 'x-page': 1, - 'x-per-page': 2, - 'x-prev-page': '', - 'x-total': 4, - 'x-total-pages': 2, - }, - }; - - const page2 = { - body: [ - { - prop1: 3, - prop2: 'test property3', - }, - { - prop1: 4, - prop2: 'test property4', - }, - ], - headers: { - link: "<'https://www.test.com/api/v3/projects/8?page=1&per_page=2>; rel='prev', <'https://www.test.com/api/v3/projects/8?page=1&per_page=2>; rel='first', <'https://www.test.com/api/v3/projects/8?page=2&per_page=2>; rel='last'", - 'x-next-page': '', - 'x-page': 2, - 'x-per-page': 2, - 'x-prev-page': 1, - 'x-total': 4, - 'x-total-pages': 2, - }, - }; - - if (u.includes('page=2')) return page2; - - return page1; + const page2 = { + body: [ + { + prop1: 3, + prop2: 'test property3', + }, + { + prop1: 4, + prop2: 'test property4', + }, + ], + headers: { + link: `<'https://www.test.com/api/v3/projects/8?page=1&per_page=2>; rel='prev', + <'https://www.test.com/api/v3/projects/8?page=1&per_page=2>; rel='first', + <'https://www.test.com/api/v3/projects/8?page=2&per_page=2>; rel='last'`, + 'x-next-page': '', + 'x-page': 2, + 'x-per-page': 2, + 'x-prev-page': 1, + 'x-total': 4, + 'x-total-pages': 2, }, - }, + }; + + return query.includes('page=2') ? page2 : page1; }; describe('RequestHelper.get()', () => { it('Should respond with an object', async () => { + Request.get = jest.fn(() => mockedGetBasic()); + const response = await RequestHelper.get( - mockService, - 'https://www.test.com', + { host: 'https://testing.com', token: 'token' }, + 'test', ); expect(response.prop1).toBe(5); @@ -89,9 +78,11 @@ describe('RequestHelper.get()', () => { }); it('Should be paginated when links are present', async () => { + Request.get = jest.fn((url, { query }) => mockedGetExtended(url, { query })); + const response = await RequestHelper.get( - mockService2, - 'https://www.test.com', + { host: 'https://testing.com', token: 'token' }, + 'test', ); response.forEach((l, index) => { @@ -101,9 +92,11 @@ describe('RequestHelper.get()', () => { }); it('Should be paginated but limited by the maxPages option', async () => { + Request.get = jest.fn((url, { query }) => mockedGetExtended(url, { query })); + const response = await RequestHelper.get( - mockService2, - 'https://www.test.com', + { host: 'https://testing.com', token: 'token' }, + 'test', { maxPages: 1 }, ); @@ -117,9 +110,11 @@ describe('RequestHelper.get()', () => { }); it('Should be paginated but limited by the page option', async () => { + Request.get = jest.fn((url, { query }) => mockedGetExtended(url, { query })); + const response = await RequestHelper.get( - mockService2, - 'https://www.test.com', + { host: 'https://testing.com', token: 'token' }, + 'test', { page: 2 }, ); @@ -133,9 +128,11 @@ describe('RequestHelper.get()', () => { }); it('Should show the pagination information when the page option is given', async () => { + Request.get = jest.fn((url, { query }) => mockedGetExtended(url, { query })); + const response = await RequestHelper.get( - mockService2, - 'https://www.test.com', + { host: 'https://testing.com', token: 'token' }, + 'test', { page: 2, showPagination: true }, ); diff --git a/test/tests/infrastructure/Bundle.ts b/test/tests/infrastructure/Utils.ts similarity index 73% rename from test/tests/infrastructure/Bundle.ts rename to test/tests/infrastructure/Utils.ts index 36e735026..86563e5a5 100644 --- a/test/tests/infrastructure/Bundle.ts +++ b/test/tests/infrastructure/Utils.ts @@ -1,4 +1,4 @@ -import { Bundler } from '../../../src/infrastructure'; +import { bundler } from '../../../src/infrastructure'; class Test1 { constructor(value: number) { @@ -13,14 +13,14 @@ class Test2 { } test('No classes passed to Bundler returns an empty Bundle', async () => { - const Bundle = Bundler(undefined as any); - const services = new Bundle(undefined as any); + const Bundle = bundler(); + const services = new Bundle(); expect(services).toEqual({}); }); test('Classes passed to Bundler get merged', async () => { - const Bundle = Bundler({ Test1, Test2 }); + const Bundle = bundler({ Test1, Test2 }); const services = new Bundle(); expect(services.Test1).toBeInstanceOf(Test1); @@ -28,7 +28,7 @@ test('Classes passed to Bundler get merged', async () => { }); test('Classes passed to Bundler with options get initialized', async () => { - const Bundle = Bundler({ Test1, Test2 }); + const Bundle = bundler({ Test1, Test2 }); const services = new Bundle(2); expect(services.Test1.value).toBe(6); diff --git a/test/tests/services/ApplicationSettings.ts b/test/tests/services/ApplicationSettings.ts index 5264d85a8..52258da0d 100644 --- a/test/tests/services/ApplicationSettings.ts +++ b/test/tests/services/ApplicationSettings.ts @@ -4,7 +4,7 @@ describe('ApplicationSettings.all', () => { let settings: ReturnType; beforeEach(async () => { const service = new ApplicationSettings({ - url: process.env.GITLAB_URL, + host: process.env.GITLAB_URL, token: process.env.PERSONAL_ACCESS_TOKEN, }); settings = await service.all(); diff --git a/test/tests/services/Projects.ts b/test/tests/services/Projects.ts index ed372de06..69b206edf 100644 --- a/test/tests/services/Projects.ts +++ b/test/tests/services/Projects.ts @@ -3,8 +3,8 @@ import { Projects } from '../../../src'; describe('Projects.all', () => { it('should return an array', async () => { const service = new Projects({ - url: process.env.GITLAB_URL, - token: process.env.PERSONAL_ACCESS_TOKEN!, + host: process.env.GITLAB_URL, + token: process.env.PERSONAL_ACCESS_TOKEN, }); const projects = await service.all(); diff --git a/test/tests/services/PushRule.ts b/test/tests/services/PushRule.ts index 554852721..86b1336a6 100644 --- a/test/tests/services/PushRule.ts +++ b/test/tests/services/PushRule.ts @@ -4,14 +4,14 @@ describe('PushRule', () => { // the feature is not available for CE users https://gitlab.com/gitlab-org/gitlab-ee/issues/3825 xit('should create or edit push rule on upsert', async () => { const service = new PushRule({ - url: process.env.GITLAB_URL, - token: process.env.PERSONAL_ACCESS_TOKEN!, + host: process.env.GITLAB_URL, + token: process.env.PERSONAL_ACCESS_TOKEN, }); - const pushRules = { + + const result = await service.edit(1, { upsert: true, - member_check: true, - }; - const result = await service.edit(1, pushRules); + memberCheck: true, + }); expect(result).toBeInstanceOf(Object); expect(result.member_check).toBeTrue(); diff --git a/test/tests/services/Snippets.ts b/test/tests/services/Snippets.ts index 2847d4616..b35cb82f1 100644 --- a/test/tests/services/Snippets.ts +++ b/test/tests/services/Snippets.ts @@ -3,11 +3,17 @@ import { Snippets } from '../../../src'; describe('Snippets', () => { it('should create snippet', async () => { const service = new Snippets({ - url: process.env.GITLAB_URL, + host: process.env.GITLAB_URL, token: process.env.PERSONAL_ACCESS_TOKEN, }); - const result = await service.create('This is a snippet', 'test.txt', 'Hello world', 'internal', { 'description': 'Hello World snippet' }); + const result = await service.create( + 'This is a snippet', + 'test.txt', + 'Hello world', + 'internal', + { description: 'Hello World snippet' }, + ); expect(result).toBeInstanceOf(Object); expect(result.title).toEqual('This is a snippet'); diff --git a/tsconfig-es5.dist.json b/tsconfig-es5.dist.json deleted file mode 100644 index 1e5e4af5f..000000000 --- a/tsconfig-es5.dist.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "./tsconfig.dist.json", - "compilerOptions": { - "target": "es5", - "outDir": "dist/es5", - "lib": [ - "dom", - "es5", - "scripthost", - "es2015.promise" - ], - } -} diff --git a/tsconfig.dist.json b/tsconfig.dist.json deleted file mode 100644 index 5324026ca..000000000 --- a/tsconfig.dist.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "target": "es6", - "strict": false, - "strictPropertyInitialization": false, - "strictNullChecks": false, - "noUnusedParameters": false, - "noUnusedLocals": false, - "skipLibCheck": true - }, - "include": [ - "src/**/*", - ] -} diff --git a/tsconfig.json b/tsconfig.json index 96161e465..7e6784138 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,22 +1,30 @@ { "compilerOptions": { - "target": "es6", - "module": "commonjs", - "strict": true, + /* Basic Options */ + "declaration": false, + "target": "es5", + "module": "es6", + "outDir": "dist", + "pretty": true, + "lib": ["ES2015","ES2016", "ES2017", "DOM"], + + /* Module Resolution Options */ + "moduleResolution": "node", + "esModuleInterop": true, + "baseUrl": "./src", + "paths": { + "@src/*": [ "./*" ], + }, + + /* Strict Type-Checking Options */ + "strictPropertyInitialization": true, + "strictNullChecks": true, + "noImplicitAny": false, + + /* Additional Checks */ "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "pretty": false, - "esModuleInterop": true, - "declaration": false, - "outDir": "dist/latest" }, - "include": [ - "src/**/*", - "test/tests/**/*" - ], - "exclude": [ - "node_modules" - ] + "include": ["src/**/*"], } \ No newline at end of file diff --git a/tslint.yml b/tslint.yml index 030639f07..93bfab6ce 100644 --- a/tslint.yml +++ b/tslint.yml @@ -1,8 +1,8 @@ ---- -extends: tslint-config-airbnb +extends: + - tslint-config-airbnb + - tslint-config-prettier rules: - object-shorthand-properties-first: false variable-name: [true, "ban-keywords", "check-format", "allow-pascal-case"] - import-name: false + object-shorthand-properties-first: false max-line-length: [true, { "limit": 100, "ignore-pattern": "`[^`]+`"}] - function-name: false + import-name: false