├── .gitignore
├── README.md
├── assets
├── how-it-works.png
├── how-it-works.vsdx
└── mvp-monitor-promo.png
├── docs
├── favicon.ico
├── index.html
└── static
│ ├── ga.js
│ ├── logo.png
│ ├── script.js
│ └── styles.css
├── package-lock.json
├── package.json
├── provisioning
├── Deploy.ps1
├── Install.ps1
├── Settings.ps1
├── lib
│ ├── Functions.ps1
│ └── Functions
│ │ ├── AuthContext.ps1
│ │ ├── JsConfigs.js
│ │ ├── JsConfigs.ps1
│ │ └── PsUtils.ps1
├── script
│ └── clean.pnp.ts
└── templates
│ └── Model.xml
├── reports
├── mvp-stats-mobile.pbix
└── mvp-stats.pbix
├── src
├── api.ts
├── index.ts
├── interface.ts
├── map.ts
└── utils.ts
├── tsconfig.json
└── tslint.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 | config/private*
4 | .env
5 | data/
6 | .DS_Store
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Microsoft MVPs Monitor
2 |
3 | > Have you ever wondered how many MVPs in specific categories and countries right now? Interested in MVP nominations' historical trends?
4 |
5 | The project collects information about active Microsoft Most Valuable Professionals from [official MVP web site](https://mvp.microsoft.com), and provides up-to-date and easy accessible statistics.
6 |
7 | Anonymous MVP stats, such as nominations in contribution areas and geography, is saved for historical purposes and exposed via publicly published Power BI report(s).
8 |
9 | 
10 |
11 | Have an idea of a metric to add? Please create an issue request.
12 |
13 | ## How it works
14 |
15 | 
16 |
17 | 1. Node.js job scraps MVP site on schedule basis
18 | 2. Structured data is dumped to SharePoint list as JSON document
19 | 3. JSON is processed and used with Power BI
20 | 4. Reports are published to web and used on a static site hosted in GitHub pages
21 |
--------------------------------------------------------------------------------
/assets/how-it-works.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koltyakov/mvp-monitor/b23c78b94a865e0fd51f682be767f526bfab3d8e/assets/how-it-works.png
--------------------------------------------------------------------------------
/assets/how-it-works.vsdx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koltyakov/mvp-monitor/b23c78b94a865e0fd51f682be767f526bfab3d8e/assets/how-it-works.vsdx
--------------------------------------------------------------------------------
/assets/mvp-monitor-promo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koltyakov/mvp-monitor/b23c78b94a865e0fd51f682be767f526bfab3d8e/assets/mvp-monitor-promo.png
--------------------------------------------------------------------------------
/docs/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koltyakov/mvp-monitor/b23c78b94a865e0fd51f682be767f526bfab3d8e/docs/favicon.ico
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | MVP Monitor
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
22 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/docs/static/ga.js:
--------------------------------------------------------------------------------
1 | window.dataLayer = window.dataLayer || [];
2 | function gtag(){ dataLayer.push(arguments); }
3 | gtag('js', new Date());
4 | gtag('config', 'UA-144726671-1');
--------------------------------------------------------------------------------
/docs/static/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koltyakov/mvp-monitor/b23c78b94a865e0fd51f682be767f526bfab3d8e/docs/static/logo.png
--------------------------------------------------------------------------------
/docs/static/script.js:
--------------------------------------------------------------------------------
1 | function getReportType() {
2 | return window.innerWidth >= 1024 ? 'desktop' : 'mobile';
3 | }
4 |
5 | function onReportLoad() {
6 | document.querySelector('.footer-stripe').hidden = true;
7 | }
8 |
9 | function getReportUrl(type) {
10 | var embedReports = {
11 | desktop: 'eyJrIjoiOGZkYTQxNzEtMmIyNC00ZjdlLTg2MDYtOTVjM2E5YjVjNmFmIiwidCI6IjY3Y2YyMDkyLTc4ZWEtNDhjNC05YWZiLTJlM2JlNzZjYjAxYyIsImMiOjl9',
12 | mobile: 'eyJrIjoiMDJkMmEyMDEtMmZlOS00YzE2LWFhMmYtMmZmODI2ZjMxMWNmIiwidCI6IjY3Y2YyMDkyLTc4ZWEtNDhjNC05YWZiLTJlM2JlNzZjYjAxYyIsImMiOjl9'
13 | };
14 | return 'https://app.powerbi.com/view?r=' + embedReports[type];
15 | }
16 |
17 | function setReportUrl(reportUrl) {
18 | document.querySelector('.footer-stripe').hidden = false;
19 | var iframe = document.querySelector('.power-bi');
20 | iframe.setAttribute('src', reportUrl);
21 | }
22 |
23 | window.addEventListener('resize', function() {
24 | var reportUrl = getReportUrl(getReportType());
25 | if (window.reportUrl !== reportUrl) {
26 | window.reportUrl = reportUrl;
27 | setReportUrl(window.reportUrl);
28 | }
29 | });
30 |
31 | (function() {
32 | window.reportUrl = getReportUrl(getReportType());
33 | setReportUrl(window.reportUrl);
34 | })();
35 |
--------------------------------------------------------------------------------
/docs/static/styles.css:
--------------------------------------------------------------------------------
1 | body, html {
2 | height: 100%;
3 | }
4 | body {
5 | margin: 0px;
6 | padding: 0px;
7 | background-color: #ffffff;
8 | color: #333333;
9 | font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif;
10 | }
11 | .header {
12 | background-color: #0072c6;
13 | color: white;
14 | height: 52px;
15 | line-height: 52px;
16 | }
17 | .header .logo {
18 | padding-left: 20px;
19 | height: 52px;
20 | }
21 | .header .name {
22 | display: inline-block;
23 | vertical-align: top;
24 | font-size: 1.1em;
25 | font-weight: 500;
26 | }
27 | .header .beta {
28 | font-size: 0.6em;
29 | font-weight: 100;
30 |
31 | }
32 | .header .what-is-mvp {
33 | display: block;
34 | font-size: 0.8em;
35 | float: right;
36 | margin-right: 20px;
37 | color: #efefef;
38 | text-decoration: none;
39 | }
40 | .footer-stripe {
41 | background-color: #eaeaea;
42 | width: 100%;
43 | height: 36px;
44 | position: absolute;
45 | bottom: 0px;
46 | border-top: 1px solid #d0d0d0;
47 | z-index: 1;
48 | }
49 | .power-bi {
50 | width: 100%;
51 | height: calc(100% - 52px);
52 | border: 0px;
53 | position: absolute;
54 | }
55 | .github-info {
56 | position: absolute;
57 | bottom: 0px;
58 | right: 0px;
59 | padding-right: 15px;
60 | background-color: #eaeaea;
61 | border-top: 1px solid #d0d0d0;
62 | width: calc(50% - 90px);
63 | min-width: 170px;
64 | text-align: right;
65 | z-index: 1;
66 | }
67 | .github-link {
68 | cursor: pointer;
69 | font-family: 'Segoe UI Semibold',wf_segoe-ui_semibold,helvetica,arial,sans-serif;
70 | color: #000;
71 | display: inline-block;
72 | vertical-align: top;
73 | text-decoration: none;
74 | line-height: 36px;
75 | margin-right: 5px;
76 | font-weight: 600;
77 | font-size: 9pt;
78 | }
79 | .github-widget {
80 | display: inline-block;
81 | height: 36px;
82 | }
83 | .github-widget > span {
84 | display: block;
85 | margin-top: 4px;
86 | }
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mvp-monitor",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.16.7",
9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
10 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
11 | "dev": true,
12 | "requires": {
13 | "@babel/highlight": "^7.16.7"
14 | }
15 | },
16 | "@babel/helper-validator-identifier": {
17 | "version": "7.16.7",
18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
19 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
20 | "dev": true
21 | },
22 | "@babel/highlight": {
23 | "version": "7.16.10",
24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
25 | "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
26 | "dev": true,
27 | "requires": {
28 | "@babel/helper-validator-identifier": "^7.16.7",
29 | "chalk": "^2.0.0",
30 | "js-tokens": "^4.0.0"
31 | },
32 | "dependencies": {
33 | "ansi-styles": {
34 | "version": "3.2.1",
35 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
36 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
37 | "dev": true,
38 | "requires": {
39 | "color-convert": "^1.9.0"
40 | }
41 | },
42 | "chalk": {
43 | "version": "2.4.2",
44 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
45 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
46 | "dev": true,
47 | "requires": {
48 | "ansi-styles": "^3.2.1",
49 | "escape-string-regexp": "^1.0.5",
50 | "supports-color": "^5.3.0"
51 | }
52 | },
53 | "color-convert": {
54 | "version": "1.9.3",
55 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
56 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
57 | "dev": true,
58 | "requires": {
59 | "color-name": "1.1.3"
60 | }
61 | },
62 | "color-name": {
63 | "version": "1.1.3",
64 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
65 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
66 | "dev": true
67 | },
68 | "has-flag": {
69 | "version": "3.0.0",
70 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
71 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
72 | "dev": true
73 | },
74 | "supports-color": {
75 | "version": "5.5.0",
76 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
77 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
78 | "dev": true,
79 | "requires": {
80 | "has-flag": "^3.0.0"
81 | }
82 | }
83 | }
84 | },
85 | "@cspotcode/source-map-consumer": {
86 | "version": "0.8.0",
87 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
88 | "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
89 | "dev": true
90 | },
91 | "@cspotcode/source-map-support": {
92 | "version": "0.7.0",
93 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
94 | "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
95 | "dev": true,
96 | "requires": {
97 | "@cspotcode/source-map-consumer": "0.8.0"
98 | }
99 | },
100 | "@pnp/common-commonjs": {
101 | "version": "2.12.0",
102 | "resolved": "https://registry.npmjs.org/@pnp/common-commonjs/-/common-commonjs-2.12.0.tgz",
103 | "integrity": "sha512-NZOgX89EAK8IoJSUiWvZzPpmBnSfrP0eEZ8ryoMeQKXNs0qVLWdD4lTYRIezTNxCoyw01NSStvQlpdXU1Ur+3Q==",
104 | "requires": {
105 | "tslib": "2.3.0"
106 | }
107 | },
108 | "@pnp/logging-commonjs": {
109 | "version": "2.12.0",
110 | "resolved": "https://registry.npmjs.org/@pnp/logging-commonjs/-/logging-commonjs-2.12.0.tgz",
111 | "integrity": "sha512-1OqR+JqcClEnbvozJbOWwBDF+/7k6kDDzDU/YKOZgDn5WfppUyAnbNA4Z1cuQlvqNQHFqiD9XznGredZIqozmQ==",
112 | "requires": {
113 | "tslib": "2.3.0"
114 | }
115 | },
116 | "@pnp/odata-commonjs": {
117 | "version": "2.12.0",
118 | "resolved": "https://registry.npmjs.org/@pnp/odata-commonjs/-/odata-commonjs-2.12.0.tgz",
119 | "integrity": "sha512-bDpcww2dX6ds8FNMcXFTj73UFQ0z3lh2GaLtO5Fp9JRTQuC53BpIsHidhUfaBmW76KLtvDkVxaLKbuilH61bUg==",
120 | "requires": {
121 | "@pnp/common-commonjs": "2.12.0",
122 | "@pnp/logging-commonjs": "2.12.0",
123 | "tslib": "2.3.0"
124 | }
125 | },
126 | "@pnp/sp-commonjs": {
127 | "version": "2.12.0",
128 | "resolved": "https://registry.npmjs.org/@pnp/sp-commonjs/-/sp-commonjs-2.12.0.tgz",
129 | "integrity": "sha512-M7BVuwKWPRP2t/OeDTcYRTw/VckDu+wjHfE62ADcfV+b0MfwuOYysK0WhjKxkoJfFehVf9EB0O+xj4DvV2iZZQ==",
130 | "requires": {
131 | "@pnp/common-commonjs": "2.12.0",
132 | "@pnp/logging-commonjs": "2.12.0",
133 | "@pnp/odata-commonjs": "2.12.0",
134 | "tslib": "2.3.0"
135 | }
136 | },
137 | "@sindresorhus/is": {
138 | "version": "2.1.1",
139 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz",
140 | "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg=="
141 | },
142 | "@szmarczak/http-timer": {
143 | "version": "4.0.6",
144 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
145 | "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
146 | "requires": {
147 | "defer-to-connect": "^2.0.0"
148 | }
149 | },
150 | "@tsconfig/node10": {
151 | "version": "1.0.8",
152 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
153 | "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
154 | "dev": true
155 | },
156 | "@tsconfig/node12": {
157 | "version": "1.0.9",
158 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
159 | "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
160 | "dev": true
161 | },
162 | "@tsconfig/node14": {
163 | "version": "1.0.1",
164 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
165 | "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
166 | "dev": true
167 | },
168 | "@tsconfig/node16": {
169 | "version": "1.0.2",
170 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
171 | "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
172 | "dev": true
173 | },
174 | "@types/cacheable-request": {
175 | "version": "6.0.2",
176 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
177 | "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==",
178 | "requires": {
179 | "@types/http-cache-semantics": "*",
180 | "@types/keyv": "*",
181 | "@types/node": "*",
182 | "@types/responselike": "*"
183 | }
184 | },
185 | "@types/cheerio": {
186 | "version": "0.22.31",
187 | "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.31.tgz",
188 | "integrity": "sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw==",
189 | "dev": true,
190 | "requires": {
191 | "@types/node": "*"
192 | }
193 | },
194 | "@types/cookie": {
195 | "version": "0.4.0",
196 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz",
197 | "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg=="
198 | },
199 | "@types/core-js": {
200 | "version": "2.5.3",
201 | "resolved": "https://registry.npmjs.org/@types/core-js/-/core-js-2.5.3.tgz",
202 | "integrity": "sha512-F9RHpjuPSit4dCCRXgi7XcqA01DAjy9QY+v9yICoxXsjXD9cgQpyZyL2eSZnTkBGXGaQnea8waZOZTogLDB+rA=="
203 | },
204 | "@types/global-agent": {
205 | "version": "2.1.0",
206 | "resolved": "https://registry.npmjs.org/@types/global-agent/-/global-agent-2.1.0.tgz",
207 | "integrity": "sha512-xBOerse4Agekl7VZJclA9bfuA9aa3u9T24TDkBiMQrZgu4qe5HMBPzVGzAt2k4dx/v3uIFI6CzG0Z9X894LHrg=="
208 | },
209 | "@types/http-cache-semantics": {
210 | "version": "4.0.1",
211 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
212 | "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ=="
213 | },
214 | "@types/jsonwebtoken": {
215 | "version": "8.5.0",
216 | "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz",
217 | "integrity": "sha512-9bVao7LvyorRGZCw0VmH/dr7Og+NdjYSsKAxB43OQoComFbBgsEpoR9JW6+qSq/ogwVBg8GI2MfAlk4SYI4OLg==",
218 | "requires": {
219 | "@types/node": "*"
220 | }
221 | },
222 | "@types/keyv": {
223 | "version": "3.1.3",
224 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz",
225 | "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==",
226 | "requires": {
227 | "@types/node": "*"
228 | }
229 | },
230 | "@types/lodash": {
231 | "version": "4.14.178",
232 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz",
233 | "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw=="
234 | },
235 | "@types/lodash.template": {
236 | "version": "4.5.0",
237 | "resolved": "https://registry.npmjs.org/@types/lodash.template/-/lodash.template-4.5.0.tgz",
238 | "integrity": "sha512-4LgHxK16IPbGR7TmXpPvNT7iNGsLCdQY6Rc0mi1a/JECt8et/D4hx6NMVAJej/d932sj1mJsg0QYHKL189O0Qw==",
239 | "requires": {
240 | "@types/lodash": "*"
241 | }
242 | },
243 | "@types/node": {
244 | "version": "17.0.17",
245 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz",
246 | "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw=="
247 | },
248 | "@types/node-fetch": {
249 | "version": "3.0.3",
250 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-3.0.3.tgz",
251 | "integrity": "sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g==",
252 | "dev": true,
253 | "requires": {
254 | "node-fetch": "*"
255 | }
256 | },
257 | "@types/responselike": {
258 | "version": "1.0.0",
259 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
260 | "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
261 | "requires": {
262 | "@types/node": "*"
263 | }
264 | },
265 | "acorn": {
266 | "version": "8.7.0",
267 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
268 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
269 | "dev": true
270 | },
271 | "acorn-walk": {
272 | "version": "8.2.0",
273 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
274 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
275 | "dev": true
276 | },
277 | "ajv": {
278 | "version": "6.12.6",
279 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
280 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
281 | "requires": {
282 | "fast-deep-equal": "^3.1.1",
283 | "fast-json-stable-stringify": "^2.0.0",
284 | "json-schema-traverse": "^0.4.1",
285 | "uri-js": "^4.2.2"
286 | }
287 | },
288 | "ansi-escapes": {
289 | "version": "4.3.2",
290 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
291 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
292 | "requires": {
293 | "type-fest": "^0.21.3"
294 | }
295 | },
296 | "ansi-regex": {
297 | "version": "5.0.1",
298 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
299 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
300 | },
301 | "ansi-styles": {
302 | "version": "4.3.0",
303 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
304 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
305 | "requires": {
306 | "color-convert": "^2.0.1"
307 | }
308 | },
309 | "arg": {
310 | "version": "4.1.3",
311 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
312 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
313 | "dev": true
314 | },
315 | "argparse": {
316 | "version": "1.0.10",
317 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
318 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
319 | "dev": true,
320 | "requires": {
321 | "sprintf-js": "~1.0.2"
322 | },
323 | "dependencies": {
324 | "sprintf-js": {
325 | "version": "1.0.3",
326 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
327 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
328 | "dev": true
329 | }
330 | }
331 | },
332 | "asn1": {
333 | "version": "0.2.6",
334 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
335 | "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
336 | "requires": {
337 | "safer-buffer": "~2.1.0"
338 | }
339 | },
340 | "assert-plus": {
341 | "version": "1.0.0",
342 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
343 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
344 | },
345 | "asynckit": {
346 | "version": "0.4.0",
347 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
348 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
349 | },
350 | "aws-sign2": {
351 | "version": "0.7.0",
352 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
353 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
354 | },
355 | "aws4": {
356 | "version": "1.11.0",
357 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
358 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
359 | },
360 | "balanced-match": {
361 | "version": "1.0.2",
362 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
363 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
364 | "dev": true
365 | },
366 | "bcrypt-pbkdf": {
367 | "version": "1.0.2",
368 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
369 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
370 | "requires": {
371 | "tweetnacl": "^0.14.3"
372 | }
373 | },
374 | "boolbase": {
375 | "version": "1.0.0",
376 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
377 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
378 | },
379 | "boolean": {
380 | "version": "3.1.4",
381 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.4.tgz",
382 | "integrity": "sha512-3hx0kwU3uzG6ReQ3pnaFQPSktpBw6RHN3/ivDKEuU8g1XSfafowyvDnadjv1xp8IZqhtSukxlwv9bF6FhX8m0w=="
383 | },
384 | "brace-expansion": {
385 | "version": "1.1.11",
386 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
387 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
388 | "dev": true,
389 | "requires": {
390 | "balanced-match": "^1.0.0",
391 | "concat-map": "0.0.1"
392 | }
393 | },
394 | "buffer-equal-constant-time": {
395 | "version": "1.0.1",
396 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
397 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
398 | },
399 | "builtin-modules": {
400 | "version": "1.1.1",
401 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
402 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
403 | "dev": true
404 | },
405 | "cacheable-lookup": {
406 | "version": "2.0.1",
407 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz",
408 | "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==",
409 | "requires": {
410 | "@types/keyv": "^3.1.1",
411 | "keyv": "^4.0.0"
412 | }
413 | },
414 | "cacheable-request": {
415 | "version": "7.0.2",
416 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
417 | "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
418 | "requires": {
419 | "clone-response": "^1.0.2",
420 | "get-stream": "^5.1.0",
421 | "http-cache-semantics": "^4.0.0",
422 | "keyv": "^4.0.0",
423 | "lowercase-keys": "^2.0.0",
424 | "normalize-url": "^6.0.1",
425 | "responselike": "^2.0.0"
426 | }
427 | },
428 | "caseless": {
429 | "version": "0.12.0",
430 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
431 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
432 | },
433 | "chalk": {
434 | "version": "4.1.2",
435 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
436 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
437 | "requires": {
438 | "ansi-styles": "^4.1.0",
439 | "supports-color": "^7.1.0"
440 | }
441 | },
442 | "chardet": {
443 | "version": "0.7.0",
444 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
445 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
446 | },
447 | "cheerio": {
448 | "version": "1.0.0-rc.10",
449 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz",
450 | "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==",
451 | "requires": {
452 | "cheerio-select": "^1.5.0",
453 | "dom-serializer": "^1.3.2",
454 | "domhandler": "^4.2.0",
455 | "htmlparser2": "^6.1.0",
456 | "parse5": "^6.0.1",
457 | "parse5-htmlparser2-tree-adapter": "^6.0.1",
458 | "tslib": "^2.2.0"
459 | }
460 | },
461 | "cheerio-select": {
462 | "version": "1.5.0",
463 | "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz",
464 | "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==",
465 | "requires": {
466 | "css-select": "^4.1.3",
467 | "css-what": "^5.0.1",
468 | "domelementtype": "^2.2.0",
469 | "domhandler": "^4.2.0",
470 | "domutils": "^2.7.0"
471 | }
472 | },
473 | "cli-cursor": {
474 | "version": "3.1.0",
475 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
476 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
477 | "requires": {
478 | "restore-cursor": "^3.1.0"
479 | }
480 | },
481 | "cli-width": {
482 | "version": "3.0.0",
483 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
484 | "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
485 | },
486 | "clone-response": {
487 | "version": "1.0.2",
488 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
489 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
490 | "requires": {
491 | "mimic-response": "^1.0.0"
492 | },
493 | "dependencies": {
494 | "mimic-response": {
495 | "version": "1.0.1",
496 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
497 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
498 | }
499 | }
500 | },
501 | "color-convert": {
502 | "version": "2.0.1",
503 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
504 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
505 | "requires": {
506 | "color-name": "~1.1.4"
507 | }
508 | },
509 | "color-name": {
510 | "version": "1.1.4",
511 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
512 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
513 | },
514 | "colors": {
515 | "version": "1.4.0",
516 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
517 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
518 | },
519 | "combined-stream": {
520 | "version": "1.0.8",
521 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
522 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
523 | "requires": {
524 | "delayed-stream": "~1.0.0"
525 | }
526 | },
527 | "commander": {
528 | "version": "5.1.0",
529 | "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
530 | "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="
531 | },
532 | "concat-map": {
533 | "version": "0.0.1",
534 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
535 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
536 | "dev": true
537 | },
538 | "cookie": {
539 | "version": "0.4.1",
540 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
541 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
542 | },
543 | "core-js": {
544 | "version": "3.21.0",
545 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz",
546 | "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ=="
547 | },
548 | "core-util-is": {
549 | "version": "1.0.2",
550 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
551 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
552 | },
553 | "cpass": {
554 | "version": "2.3.0",
555 | "resolved": "https://registry.npmjs.org/cpass/-/cpass-2.3.0.tgz",
556 | "integrity": "sha512-iI0WSBupw1RQJGtYIT4Fa09ltF4I8acs6nCzsuuZm6gw6lPmIwCyfPZ8ji7C/icVGOpgU0r9goa1qRerdXCdPQ==",
557 | "requires": {
558 | "scmp": "^2.1.0"
559 | }
560 | },
561 | "crc-32": {
562 | "version": "1.2.1",
563 | "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz",
564 | "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==",
565 | "requires": {
566 | "exit-on-epipe": "~1.0.1",
567 | "printj": "~1.3.1"
568 | }
569 | },
570 | "create-require": {
571 | "version": "1.1.1",
572 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
573 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
574 | "dev": true
575 | },
576 | "css-select": {
577 | "version": "4.2.1",
578 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz",
579 | "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==",
580 | "requires": {
581 | "boolbase": "^1.0.0",
582 | "css-what": "^5.1.0",
583 | "domhandler": "^4.3.0",
584 | "domutils": "^2.8.0",
585 | "nth-check": "^2.0.1"
586 | }
587 | },
588 | "css-what": {
589 | "version": "5.1.0",
590 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
591 | "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw=="
592 | },
593 | "dashdash": {
594 | "version": "1.14.1",
595 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
596 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
597 | "requires": {
598 | "assert-plus": "^1.0.0"
599 | }
600 | },
601 | "decompress-response": {
602 | "version": "5.0.0",
603 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz",
604 | "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==",
605 | "requires": {
606 | "mimic-response": "^2.0.0"
607 | }
608 | },
609 | "defer-to-connect": {
610 | "version": "2.0.1",
611 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
612 | "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="
613 | },
614 | "define-properties": {
615 | "version": "1.1.3",
616 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
617 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
618 | "requires": {
619 | "object-keys": "^1.0.12"
620 | }
621 | },
622 | "delayed-stream": {
623 | "version": "1.0.0",
624 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
625 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
626 | },
627 | "detect-node": {
628 | "version": "2.1.0",
629 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
630 | "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="
631 | },
632 | "diff": {
633 | "version": "4.0.2",
634 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
635 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
636 | "dev": true
637 | },
638 | "dom-serializer": {
639 | "version": "1.3.2",
640 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
641 | "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
642 | "requires": {
643 | "domelementtype": "^2.0.1",
644 | "domhandler": "^4.2.0",
645 | "entities": "^2.0.0"
646 | }
647 | },
648 | "domelementtype": {
649 | "version": "2.2.0",
650 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
651 | "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
652 | },
653 | "domhandler": {
654 | "version": "4.3.0",
655 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
656 | "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
657 | "requires": {
658 | "domelementtype": "^2.2.0"
659 | }
660 | },
661 | "domutils": {
662 | "version": "2.8.0",
663 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
664 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
665 | "requires": {
666 | "dom-serializer": "^1.0.1",
667 | "domelementtype": "^2.2.0",
668 | "domhandler": "^4.2.0"
669 | }
670 | },
671 | "duplexer3": {
672 | "version": "0.1.4",
673 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
674 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
675 | },
676 | "ecc-jsbn": {
677 | "version": "0.1.2",
678 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
679 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
680 | "requires": {
681 | "jsbn": "~0.1.0",
682 | "safer-buffer": "^2.1.0"
683 | }
684 | },
685 | "ecdsa-sig-formatter": {
686 | "version": "1.0.11",
687 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
688 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
689 | "requires": {
690 | "safe-buffer": "^5.0.1"
691 | }
692 | },
693 | "emoji-regex": {
694 | "version": "8.0.0",
695 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
696 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
697 | },
698 | "end-of-stream": {
699 | "version": "1.4.4",
700 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
701 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
702 | "requires": {
703 | "once": "^1.4.0"
704 | }
705 | },
706 | "entities": {
707 | "version": "2.2.0",
708 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
709 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
710 | },
711 | "es6-error": {
712 | "version": "4.1.1",
713 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
714 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="
715 | },
716 | "escape-string-regexp": {
717 | "version": "1.0.5",
718 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
719 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
720 | },
721 | "esprima": {
722 | "version": "4.0.1",
723 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
724 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
725 | "dev": true
726 | },
727 | "exit-on-epipe": {
728 | "version": "1.0.1",
729 | "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
730 | "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
731 | },
732 | "extend": {
733 | "version": "3.0.2",
734 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
735 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
736 | },
737 | "external-editor": {
738 | "version": "3.1.0",
739 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
740 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
741 | "requires": {
742 | "chardet": "^0.7.0",
743 | "iconv-lite": "^0.4.24",
744 | "tmp": "^0.0.33"
745 | }
746 | },
747 | "extsprintf": {
748 | "version": "1.3.0",
749 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
750 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
751 | },
752 | "fast-deep-equal": {
753 | "version": "3.1.3",
754 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
755 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
756 | },
757 | "fast-json-stable-stringify": {
758 | "version": "2.1.0",
759 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
760 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
761 | },
762 | "figures": {
763 | "version": "3.2.0",
764 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
765 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
766 | "requires": {
767 | "escape-string-regexp": "^1.0.5"
768 | }
769 | },
770 | "forever-agent": {
771 | "version": "0.6.1",
772 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
773 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
774 | },
775 | "form-data": {
776 | "version": "2.3.3",
777 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
778 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
779 | "requires": {
780 | "asynckit": "^0.4.0",
781 | "combined-stream": "^1.0.6",
782 | "mime-types": "^2.1.12"
783 | }
784 | },
785 | "fs.realpath": {
786 | "version": "1.0.0",
787 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
788 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
789 | "dev": true
790 | },
791 | "function-bind": {
792 | "version": "1.1.1",
793 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
794 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
795 | "dev": true
796 | },
797 | "get-stream": {
798 | "version": "5.2.0",
799 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
800 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
801 | "requires": {
802 | "pump": "^3.0.0"
803 | }
804 | },
805 | "getpass": {
806 | "version": "0.1.7",
807 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
808 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
809 | "requires": {
810 | "assert-plus": "^1.0.0"
811 | }
812 | },
813 | "glob": {
814 | "version": "7.2.0",
815 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
816 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
817 | "dev": true,
818 | "requires": {
819 | "fs.realpath": "^1.0.0",
820 | "inflight": "^1.0.4",
821 | "inherits": "2",
822 | "minimatch": "^3.0.4",
823 | "once": "^1.3.0",
824 | "path-is-absolute": "^1.0.0"
825 | }
826 | },
827 | "global-agent": {
828 | "version": "2.1.12",
829 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz",
830 | "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==",
831 | "requires": {
832 | "boolean": "^3.0.1",
833 | "core-js": "^3.6.5",
834 | "es6-error": "^4.1.1",
835 | "matcher": "^3.0.0",
836 | "roarr": "^2.15.3",
837 | "semver": "^7.3.2",
838 | "serialize-error": "^7.0.1"
839 | }
840 | },
841 | "globalthis": {
842 | "version": "1.0.2",
843 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
844 | "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
845 | "requires": {
846 | "define-properties": "^1.1.3"
847 | }
848 | },
849 | "got": {
850 | "version": "10.7.0",
851 | "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz",
852 | "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==",
853 | "requires": {
854 | "@sindresorhus/is": "^2.0.0",
855 | "@szmarczak/http-timer": "^4.0.0",
856 | "@types/cacheable-request": "^6.0.1",
857 | "cacheable-lookup": "^2.0.0",
858 | "cacheable-request": "^7.0.1",
859 | "decompress-response": "^5.0.0",
860 | "duplexer3": "^0.1.4",
861 | "get-stream": "^5.0.0",
862 | "lowercase-keys": "^2.0.0",
863 | "mimic-response": "^2.1.0",
864 | "p-cancelable": "^2.0.0",
865 | "p-event": "^4.0.0",
866 | "responselike": "^2.0.0",
867 | "to-readable-stream": "^2.0.0",
868 | "type-fest": "^0.10.0"
869 | },
870 | "dependencies": {
871 | "type-fest": {
872 | "version": "0.10.0",
873 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz",
874 | "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw=="
875 | }
876 | }
877 | },
878 | "har-schema": {
879 | "version": "2.0.0",
880 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
881 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
882 | },
883 | "har-validator": {
884 | "version": "5.1.5",
885 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
886 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
887 | "requires": {
888 | "ajv": "^6.12.3",
889 | "har-schema": "^2.0.0"
890 | }
891 | },
892 | "has": {
893 | "version": "1.0.3",
894 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
895 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
896 | "dev": true,
897 | "requires": {
898 | "function-bind": "^1.1.1"
899 | }
900 | },
901 | "has-flag": {
902 | "version": "4.0.0",
903 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
904 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
905 | },
906 | "htmlparser2": {
907 | "version": "6.1.0",
908 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
909 | "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
910 | "requires": {
911 | "domelementtype": "^2.0.1",
912 | "domhandler": "^4.0.0",
913 | "domutils": "^2.5.2",
914 | "entities": "^2.0.0"
915 | }
916 | },
917 | "http-cache-semantics": {
918 | "version": "4.1.0",
919 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
920 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
921 | },
922 | "http-signature": {
923 | "version": "1.2.0",
924 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
925 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
926 | "requires": {
927 | "assert-plus": "^1.0.0",
928 | "jsprim": "^1.2.2",
929 | "sshpk": "^1.7.0"
930 | }
931 | },
932 | "iconv-lite": {
933 | "version": "0.4.24",
934 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
935 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
936 | "requires": {
937 | "safer-buffer": ">= 2.1.2 < 3"
938 | }
939 | },
940 | "inflight": {
941 | "version": "1.0.6",
942 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
943 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
944 | "dev": true,
945 | "requires": {
946 | "once": "^1.3.0",
947 | "wrappy": "1"
948 | }
949 | },
950 | "inherits": {
951 | "version": "2.0.4",
952 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
953 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
954 | "dev": true
955 | },
956 | "inquirer": {
957 | "version": "7.3.3",
958 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
959 | "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
960 | "requires": {
961 | "ansi-escapes": "^4.2.1",
962 | "chalk": "^4.1.0",
963 | "cli-cursor": "^3.1.0",
964 | "cli-width": "^3.0.0",
965 | "external-editor": "^3.0.3",
966 | "figures": "^3.0.0",
967 | "lodash": "^4.17.19",
968 | "mute-stream": "0.0.8",
969 | "run-async": "^2.4.0",
970 | "rxjs": "^6.6.0",
971 | "string-width": "^4.1.0",
972 | "strip-ansi": "^6.0.0",
973 | "through": "^2.3.6"
974 | }
975 | },
976 | "is-core-module": {
977 | "version": "2.8.1",
978 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
979 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
980 | "dev": true,
981 | "requires": {
982 | "has": "^1.0.3"
983 | }
984 | },
985 | "is-fullwidth-code-point": {
986 | "version": "3.0.0",
987 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
988 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
989 | },
990 | "is-typedarray": {
991 | "version": "1.0.0",
992 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
993 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
994 | },
995 | "isstream": {
996 | "version": "0.1.2",
997 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
998 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
999 | },
1000 | "js-tokens": {
1001 | "version": "4.0.0",
1002 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1003 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1004 | "dev": true
1005 | },
1006 | "js-yaml": {
1007 | "version": "3.14.1",
1008 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
1009 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
1010 | "dev": true,
1011 | "requires": {
1012 | "argparse": "^1.0.7",
1013 | "esprima": "^4.0.0"
1014 | }
1015 | },
1016 | "jsbn": {
1017 | "version": "0.1.1",
1018 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1019 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
1020 | },
1021 | "json-buffer": {
1022 | "version": "3.0.1",
1023 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
1024 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
1025 | },
1026 | "json-schema": {
1027 | "version": "0.4.0",
1028 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
1029 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
1030 | },
1031 | "json-schema-traverse": {
1032 | "version": "0.4.1",
1033 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1034 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
1035 | },
1036 | "json-stringify-safe": {
1037 | "version": "5.0.1",
1038 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1039 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
1040 | },
1041 | "jsonwebtoken": {
1042 | "version": "8.5.1",
1043 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
1044 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
1045 | "requires": {
1046 | "jws": "^3.2.2",
1047 | "lodash.includes": "^4.3.0",
1048 | "lodash.isboolean": "^3.0.3",
1049 | "lodash.isinteger": "^4.0.4",
1050 | "lodash.isnumber": "^3.0.3",
1051 | "lodash.isplainobject": "^4.0.6",
1052 | "lodash.isstring": "^4.0.1",
1053 | "lodash.once": "^4.0.0",
1054 | "ms": "^2.1.1",
1055 | "semver": "^5.6.0"
1056 | },
1057 | "dependencies": {
1058 | "semver": {
1059 | "version": "5.7.1",
1060 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1061 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
1062 | }
1063 | }
1064 | },
1065 | "jsprim": {
1066 | "version": "1.4.2",
1067 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
1068 | "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
1069 | "requires": {
1070 | "assert-plus": "1.0.0",
1071 | "extsprintf": "1.3.0",
1072 | "json-schema": "0.4.0",
1073 | "verror": "1.10.0"
1074 | }
1075 | },
1076 | "jwa": {
1077 | "version": "1.4.1",
1078 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
1079 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
1080 | "requires": {
1081 | "buffer-equal-constant-time": "1.0.1",
1082 | "ecdsa-sig-formatter": "1.0.11",
1083 | "safe-buffer": "^5.0.1"
1084 | }
1085 | },
1086 | "jws": {
1087 | "version": "3.2.2",
1088 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
1089 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
1090 | "requires": {
1091 | "jwa": "^1.4.1",
1092 | "safe-buffer": "^5.0.1"
1093 | }
1094 | },
1095 | "keyv": {
1096 | "version": "4.1.1",
1097 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.1.1.tgz",
1098 | "integrity": "sha512-tGv1yP6snQVDSM4X6yxrv2zzq/EvpW+oYiUz6aueW1u9CtS8RzUQYxxmFwgZlO2jSgCxQbchhxaqXXp2hnKGpQ==",
1099 | "requires": {
1100 | "json-buffer": "3.0.1"
1101 | }
1102 | },
1103 | "lodash": {
1104 | "version": "4.17.21",
1105 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1106 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
1107 | },
1108 | "lodash._reinterpolate": {
1109 | "version": "3.0.0",
1110 | "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
1111 | "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
1112 | },
1113 | "lodash.includes": {
1114 | "version": "4.3.0",
1115 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
1116 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
1117 | },
1118 | "lodash.isboolean": {
1119 | "version": "3.0.3",
1120 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
1121 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
1122 | },
1123 | "lodash.isinteger": {
1124 | "version": "4.0.4",
1125 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
1126 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
1127 | },
1128 | "lodash.isnumber": {
1129 | "version": "3.0.3",
1130 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
1131 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
1132 | },
1133 | "lodash.isplainobject": {
1134 | "version": "4.0.6",
1135 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
1136 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
1137 | },
1138 | "lodash.isstring": {
1139 | "version": "4.0.1",
1140 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
1141 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
1142 | },
1143 | "lodash.once": {
1144 | "version": "4.1.1",
1145 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
1146 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
1147 | },
1148 | "lodash.template": {
1149 | "version": "4.5.0",
1150 | "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
1151 | "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
1152 | "requires": {
1153 | "lodash._reinterpolate": "^3.0.0",
1154 | "lodash.templatesettings": "^4.0.0"
1155 | }
1156 | },
1157 | "lodash.templatesettings": {
1158 | "version": "4.2.0",
1159 | "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
1160 | "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
1161 | "requires": {
1162 | "lodash._reinterpolate": "^3.0.0"
1163 | }
1164 | },
1165 | "lowercase-keys": {
1166 | "version": "2.0.0",
1167 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
1168 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
1169 | },
1170 | "lru-cache": {
1171 | "version": "6.0.0",
1172 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1173 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1174 | "requires": {
1175 | "yallist": "^4.0.0"
1176 | }
1177 | },
1178 | "make-error": {
1179 | "version": "1.3.6",
1180 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
1181 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
1182 | "dev": true
1183 | },
1184 | "matcher": {
1185 | "version": "3.0.0",
1186 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
1187 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
1188 | "requires": {
1189 | "escape-string-regexp": "^4.0.0"
1190 | },
1191 | "dependencies": {
1192 | "escape-string-regexp": {
1193 | "version": "4.0.0",
1194 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1195 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
1196 | }
1197 | }
1198 | },
1199 | "mime-db": {
1200 | "version": "1.51.0",
1201 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
1202 | "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
1203 | },
1204 | "mime-types": {
1205 | "version": "2.1.34",
1206 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
1207 | "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
1208 | "requires": {
1209 | "mime-db": "1.51.0"
1210 | }
1211 | },
1212 | "mimic-fn": {
1213 | "version": "2.1.0",
1214 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
1215 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
1216 | },
1217 | "mimic-response": {
1218 | "version": "2.1.0",
1219 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
1220 | "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA=="
1221 | },
1222 | "minimatch": {
1223 | "version": "3.0.5",
1224 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
1225 | "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
1226 | "dev": true,
1227 | "requires": {
1228 | "brace-expansion": "^1.1.7"
1229 | }
1230 | },
1231 | "minimist": {
1232 | "version": "1.2.5",
1233 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1234 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1235 | "dev": true
1236 | },
1237 | "mkdirp": {
1238 | "version": "1.0.4",
1239 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
1240 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
1241 | },
1242 | "ms": {
1243 | "version": "2.1.3",
1244 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1245 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1246 | },
1247 | "mute-stream": {
1248 | "version": "0.0.8",
1249 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
1250 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
1251 | },
1252 | "node-fetch": {
1253 | "version": "2.6.7",
1254 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
1255 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
1256 | "requires": {
1257 | "whatwg-url": "^5.0.0"
1258 | }
1259 | },
1260 | "node-ntlm-client": {
1261 | "version": "0.1.2",
1262 | "resolved": "https://registry.npmjs.org/node-ntlm-client/-/node-ntlm-client-0.1.2.tgz",
1263 | "integrity": "sha1-bAXiNLDZGUuwh5kpSYxvE5YshHI=",
1264 | "requires": {
1265 | "extend": "^3.0.0",
1266 | "request": "^2.66.0"
1267 | }
1268 | },
1269 | "node-sp-auth": {
1270 | "version": "3.0.4",
1271 | "resolved": "https://registry.npmjs.org/node-sp-auth/-/node-sp-auth-3.0.4.tgz",
1272 | "integrity": "sha512-bzkzNZyOSKq2lnyHfavnV9IrIdiBE9W8s9Fazo4Cea9efrxSVR7zZ686rOGscRhD9a49ZCtHbSF1y6QEYnBLCA==",
1273 | "requires": {
1274 | "@types/cookie": "0.4.0",
1275 | "@types/core-js": "2.5.3",
1276 | "@types/global-agent": "2.1.0",
1277 | "@types/jsonwebtoken": "8.5.0",
1278 | "@types/lodash.template": "4.5.0",
1279 | "@types/node": "14.0.13",
1280 | "cookie": "0.4.1",
1281 | "cpass": "2.3.0",
1282 | "global-agent": "2.1.12",
1283 | "got": "10.7.0",
1284 | "jsonwebtoken": "8.5.1",
1285 | "lodash.template": "4.5.0",
1286 | "node-ntlm-client": "0.1.2",
1287 | "node-sp-auth-config": "3.0.1",
1288 | "xmldoc": "1.1.2"
1289 | },
1290 | "dependencies": {
1291 | "@types/node": {
1292 | "version": "14.0.13",
1293 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.13.tgz",
1294 | "integrity": "sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA=="
1295 | },
1296 | "node-sp-auth-config": {
1297 | "version": "3.0.1",
1298 | "resolved": "https://registry.npmjs.org/node-sp-auth-config/-/node-sp-auth-config-3.0.1.tgz",
1299 | "integrity": "sha512-pc+lQlOm4ksqhOqoH9rivFzpag4tt36NtufSh5tiKp6vWDtCFivMNLfy/n6s0oFnGxdKqd6slkRg6HLGT91S0A==",
1300 | "requires": {
1301 | "colors": "^1.4.0",
1302 | "commander": "^5.1.0",
1303 | "cpass": "^2.3.0",
1304 | "inquirer": "^7.2.0",
1305 | "mkdirp": "^1.0.4",
1306 | "node-sp-auth": "^3.0.0"
1307 | }
1308 | }
1309 | }
1310 | },
1311 | "node-sp-auth-config": {
1312 | "version": "3.0.2",
1313 | "resolved": "https://registry.npmjs.org/node-sp-auth-config/-/node-sp-auth-config-3.0.2.tgz",
1314 | "integrity": "sha512-YpsqBBo9TKJepR3xq+ZqoPn27HngAGneWHm0bY551WGyTQaEvC6KHiAbBLfeO4wY7Yg0vR49S4q/sWWeiAR3Ow==",
1315 | "requires": {
1316 | "colors": "1.4.0",
1317 | "commander": "^5.1.0",
1318 | "cpass": "^2.3.0",
1319 | "inquirer": "^7.2.0",
1320 | "mkdirp": "^1.0.4",
1321 | "node-sp-auth": "^3.0.0"
1322 | }
1323 | },
1324 | "normalize-url": {
1325 | "version": "6.1.0",
1326 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
1327 | "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="
1328 | },
1329 | "nth-check": {
1330 | "version": "2.0.1",
1331 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
1332 | "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
1333 | "requires": {
1334 | "boolbase": "^1.0.0"
1335 | }
1336 | },
1337 | "oauth-sign": {
1338 | "version": "0.9.0",
1339 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
1340 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
1341 | },
1342 | "object-keys": {
1343 | "version": "1.1.1",
1344 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1345 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
1346 | },
1347 | "once": {
1348 | "version": "1.4.0",
1349 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1350 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1351 | "requires": {
1352 | "wrappy": "1"
1353 | }
1354 | },
1355 | "onetime": {
1356 | "version": "5.1.2",
1357 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
1358 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
1359 | "requires": {
1360 | "mimic-fn": "^2.1.0"
1361 | }
1362 | },
1363 | "os-tmpdir": {
1364 | "version": "1.0.2",
1365 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1366 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
1367 | },
1368 | "p-cancelable": {
1369 | "version": "2.1.1",
1370 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
1371 | "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="
1372 | },
1373 | "p-event": {
1374 | "version": "4.2.0",
1375 | "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
1376 | "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
1377 | "requires": {
1378 | "p-timeout": "^3.1.0"
1379 | }
1380 | },
1381 | "p-finally": {
1382 | "version": "1.0.0",
1383 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
1384 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
1385 | },
1386 | "p-timeout": {
1387 | "version": "3.2.0",
1388 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
1389 | "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
1390 | "requires": {
1391 | "p-finally": "^1.0.0"
1392 | }
1393 | },
1394 | "parse5": {
1395 | "version": "6.0.1",
1396 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
1397 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
1398 | },
1399 | "parse5-htmlparser2-tree-adapter": {
1400 | "version": "6.0.1",
1401 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
1402 | "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
1403 | "requires": {
1404 | "parse5": "^6.0.1"
1405 | }
1406 | },
1407 | "path-is-absolute": {
1408 | "version": "1.0.1",
1409 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1410 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1411 | "dev": true
1412 | },
1413 | "path-parse": {
1414 | "version": "1.0.7",
1415 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1416 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1417 | "dev": true
1418 | },
1419 | "performance-now": {
1420 | "version": "2.1.0",
1421 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
1422 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
1423 | },
1424 | "printj": {
1425 | "version": "1.3.1",
1426 | "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz",
1427 | "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg=="
1428 | },
1429 | "psl": {
1430 | "version": "1.8.0",
1431 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
1432 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
1433 | },
1434 | "pump": {
1435 | "version": "3.0.0",
1436 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
1437 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
1438 | "requires": {
1439 | "end-of-stream": "^1.1.0",
1440 | "once": "^1.3.1"
1441 | }
1442 | },
1443 | "punycode": {
1444 | "version": "2.1.1",
1445 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1446 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
1447 | },
1448 | "qs": {
1449 | "version": "6.5.3",
1450 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
1451 | "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
1452 | },
1453 | "request": {
1454 | "version": "2.88.2",
1455 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
1456 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
1457 | "requires": {
1458 | "aws-sign2": "~0.7.0",
1459 | "aws4": "^1.8.0",
1460 | "caseless": "~0.12.0",
1461 | "combined-stream": "~1.0.6",
1462 | "extend": "~3.0.2",
1463 | "forever-agent": "~0.6.1",
1464 | "form-data": "~2.3.2",
1465 | "har-validator": "~5.1.3",
1466 | "http-signature": "~1.2.0",
1467 | "is-typedarray": "~1.0.0",
1468 | "isstream": "~0.1.2",
1469 | "json-stringify-safe": "~5.0.1",
1470 | "mime-types": "~2.1.19",
1471 | "oauth-sign": "~0.9.0",
1472 | "performance-now": "^2.1.0",
1473 | "qs": "~6.5.2",
1474 | "safe-buffer": "^5.1.2",
1475 | "tough-cookie": "~2.5.0",
1476 | "tunnel-agent": "^0.6.0",
1477 | "uuid": "^3.3.2"
1478 | }
1479 | },
1480 | "resolve": {
1481 | "version": "1.22.0",
1482 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
1483 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
1484 | "dev": true,
1485 | "requires": {
1486 | "is-core-module": "^2.8.1",
1487 | "path-parse": "^1.0.7",
1488 | "supports-preserve-symlinks-flag": "^1.0.0"
1489 | }
1490 | },
1491 | "responselike": {
1492 | "version": "2.0.0",
1493 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
1494 | "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
1495 | "requires": {
1496 | "lowercase-keys": "^2.0.0"
1497 | }
1498 | },
1499 | "restore-cursor": {
1500 | "version": "3.1.0",
1501 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
1502 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
1503 | "requires": {
1504 | "onetime": "^5.1.0",
1505 | "signal-exit": "^3.0.2"
1506 | }
1507 | },
1508 | "roarr": {
1509 | "version": "2.15.4",
1510 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
1511 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
1512 | "requires": {
1513 | "boolean": "^3.0.1",
1514 | "detect-node": "^2.0.4",
1515 | "globalthis": "^1.0.1",
1516 | "json-stringify-safe": "^5.0.1",
1517 | "semver-compare": "^1.0.0",
1518 | "sprintf-js": "^1.1.2"
1519 | }
1520 | },
1521 | "run-async": {
1522 | "version": "2.4.1",
1523 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
1524 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
1525 | },
1526 | "rxjs": {
1527 | "version": "6.6.7",
1528 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
1529 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
1530 | "requires": {
1531 | "tslib": "^1.9.0"
1532 | },
1533 | "dependencies": {
1534 | "tslib": {
1535 | "version": "1.14.1",
1536 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
1537 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
1538 | }
1539 | }
1540 | },
1541 | "safe-buffer": {
1542 | "version": "5.2.1",
1543 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1544 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1545 | },
1546 | "safer-buffer": {
1547 | "version": "2.1.2",
1548 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1549 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1550 | },
1551 | "sax": {
1552 | "version": "1.2.4",
1553 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
1554 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
1555 | },
1556 | "scmp": {
1557 | "version": "2.1.0",
1558 | "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.1.0.tgz",
1559 | "integrity": "sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q=="
1560 | },
1561 | "semver": {
1562 | "version": "7.3.5",
1563 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
1564 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
1565 | "requires": {
1566 | "lru-cache": "^6.0.0"
1567 | }
1568 | },
1569 | "semver-compare": {
1570 | "version": "1.0.0",
1571 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
1572 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w="
1573 | },
1574 | "serialize-error": {
1575 | "version": "7.0.1",
1576 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
1577 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
1578 | "requires": {
1579 | "type-fest": "^0.13.1"
1580 | },
1581 | "dependencies": {
1582 | "type-fest": {
1583 | "version": "0.13.1",
1584 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
1585 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="
1586 | }
1587 | }
1588 | },
1589 | "signal-exit": {
1590 | "version": "3.0.7",
1591 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
1592 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
1593 | },
1594 | "sp-pnp-node": {
1595 | "version": "3.0.1",
1596 | "resolved": "https://registry.npmjs.org/sp-pnp-node/-/sp-pnp-node-3.0.1.tgz",
1597 | "integrity": "sha512-gT7Dg7Pnsn6EVLV6JeSQ+tBK0VM3IQGU/uO1nqvXeNK0jMHQgktlr6Q9iK/5Y6JEXp/qcnXGyN6rgvIU6y30Eg==",
1598 | "requires": {
1599 | "crc-32": "^1.2.0",
1600 | "node-fetch": "^2.6.1",
1601 | "node-sp-auth-config": "^3.0.1"
1602 | },
1603 | "dependencies": {
1604 | "node-fetch": {
1605 | "version": "2.6.7",
1606 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
1607 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
1608 | "requires": {
1609 | "whatwg-url": "^5.0.0"
1610 | }
1611 | }
1612 | }
1613 | },
1614 | "sprintf-js": {
1615 | "version": "1.1.2",
1616 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
1617 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="
1618 | },
1619 | "sshpk": {
1620 | "version": "1.17.0",
1621 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
1622 | "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
1623 | "requires": {
1624 | "asn1": "~0.2.3",
1625 | "assert-plus": "^1.0.0",
1626 | "bcrypt-pbkdf": "^1.0.0",
1627 | "dashdash": "^1.12.0",
1628 | "ecc-jsbn": "~0.1.1",
1629 | "getpass": "^0.1.1",
1630 | "jsbn": "~0.1.0",
1631 | "safer-buffer": "^2.0.2",
1632 | "tweetnacl": "~0.14.0"
1633 | }
1634 | },
1635 | "string-width": {
1636 | "version": "4.2.3",
1637 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1638 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1639 | "requires": {
1640 | "emoji-regex": "^8.0.0",
1641 | "is-fullwidth-code-point": "^3.0.0",
1642 | "strip-ansi": "^6.0.1"
1643 | }
1644 | },
1645 | "strip-ansi": {
1646 | "version": "6.0.1",
1647 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1648 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1649 | "requires": {
1650 | "ansi-regex": "^5.0.1"
1651 | }
1652 | },
1653 | "supports-color": {
1654 | "version": "7.2.0",
1655 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1656 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1657 | "requires": {
1658 | "has-flag": "^4.0.0"
1659 | }
1660 | },
1661 | "supports-preserve-symlinks-flag": {
1662 | "version": "1.0.0",
1663 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1664 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1665 | "dev": true
1666 | },
1667 | "through": {
1668 | "version": "2.3.8",
1669 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
1670 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
1671 | },
1672 | "tmp": {
1673 | "version": "0.0.33",
1674 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
1675 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
1676 | "requires": {
1677 | "os-tmpdir": "~1.0.2"
1678 | }
1679 | },
1680 | "to-readable-stream": {
1681 | "version": "2.1.0",
1682 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz",
1683 | "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w=="
1684 | },
1685 | "tough-cookie": {
1686 | "version": "2.5.0",
1687 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
1688 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
1689 | "requires": {
1690 | "psl": "^1.1.28",
1691 | "punycode": "^2.1.1"
1692 | }
1693 | },
1694 | "tr46": {
1695 | "version": "0.0.3",
1696 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1697 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
1698 | },
1699 | "ts-node": {
1700 | "version": "10.5.0",
1701 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz",
1702 | "integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==",
1703 | "dev": true,
1704 | "requires": {
1705 | "@cspotcode/source-map-support": "0.7.0",
1706 | "@tsconfig/node10": "^1.0.7",
1707 | "@tsconfig/node12": "^1.0.7",
1708 | "@tsconfig/node14": "^1.0.0",
1709 | "@tsconfig/node16": "^1.0.2",
1710 | "acorn": "^8.4.1",
1711 | "acorn-walk": "^8.1.1",
1712 | "arg": "^4.1.0",
1713 | "create-require": "^1.1.0",
1714 | "diff": "^4.0.1",
1715 | "make-error": "^1.1.1",
1716 | "v8-compile-cache-lib": "^3.0.0",
1717 | "yn": "3.1.1"
1718 | }
1719 | },
1720 | "tslib": {
1721 | "version": "2.3.0",
1722 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
1723 | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
1724 | },
1725 | "tslint": {
1726 | "version": "6.1.3",
1727 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz",
1728 | "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==",
1729 | "dev": true,
1730 | "requires": {
1731 | "@babel/code-frame": "^7.0.0",
1732 | "builtin-modules": "^1.1.1",
1733 | "chalk": "^2.3.0",
1734 | "commander": "^2.12.1",
1735 | "diff": "^4.0.1",
1736 | "glob": "^7.1.1",
1737 | "js-yaml": "^3.13.1",
1738 | "minimatch": "^3.0.4",
1739 | "mkdirp": "^0.5.3",
1740 | "resolve": "^1.3.2",
1741 | "semver": "^5.3.0",
1742 | "tslib": "^1.13.0",
1743 | "tsutils": "^2.29.0"
1744 | },
1745 | "dependencies": {
1746 | "ansi-styles": {
1747 | "version": "3.2.1",
1748 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1749 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1750 | "dev": true,
1751 | "requires": {
1752 | "color-convert": "^1.9.0"
1753 | }
1754 | },
1755 | "chalk": {
1756 | "version": "2.4.2",
1757 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1758 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1759 | "dev": true,
1760 | "requires": {
1761 | "ansi-styles": "^3.2.1",
1762 | "escape-string-regexp": "^1.0.5",
1763 | "supports-color": "^5.3.0"
1764 | }
1765 | },
1766 | "color-convert": {
1767 | "version": "1.9.3",
1768 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1769 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1770 | "dev": true,
1771 | "requires": {
1772 | "color-name": "1.1.3"
1773 | }
1774 | },
1775 | "color-name": {
1776 | "version": "1.1.3",
1777 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1778 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
1779 | "dev": true
1780 | },
1781 | "commander": {
1782 | "version": "2.20.3",
1783 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
1784 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
1785 | "dev": true
1786 | },
1787 | "has-flag": {
1788 | "version": "3.0.0",
1789 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1790 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1791 | "dev": true
1792 | },
1793 | "mkdirp": {
1794 | "version": "0.5.5",
1795 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
1796 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
1797 | "dev": true,
1798 | "requires": {
1799 | "minimist": "^1.2.5"
1800 | }
1801 | },
1802 | "semver": {
1803 | "version": "5.7.1",
1804 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1805 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1806 | "dev": true
1807 | },
1808 | "supports-color": {
1809 | "version": "5.5.0",
1810 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1811 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1812 | "dev": true,
1813 | "requires": {
1814 | "has-flag": "^3.0.0"
1815 | }
1816 | },
1817 | "tslib": {
1818 | "version": "1.14.1",
1819 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
1820 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
1821 | "dev": true
1822 | }
1823 | }
1824 | },
1825 | "tsutils": {
1826 | "version": "2.29.0",
1827 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
1828 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
1829 | "dev": true,
1830 | "requires": {
1831 | "tslib": "^1.8.1"
1832 | },
1833 | "dependencies": {
1834 | "tslib": {
1835 | "version": "1.14.1",
1836 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
1837 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
1838 | "dev": true
1839 | }
1840 | }
1841 | },
1842 | "tunnel-agent": {
1843 | "version": "0.6.0",
1844 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1845 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1846 | "requires": {
1847 | "safe-buffer": "^5.0.1"
1848 | }
1849 | },
1850 | "tweetnacl": {
1851 | "version": "0.14.5",
1852 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1853 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
1854 | },
1855 | "type-fest": {
1856 | "version": "0.21.3",
1857 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
1858 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="
1859 | },
1860 | "typescript": {
1861 | "version": "4.5.5",
1862 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
1863 | "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
1864 | "dev": true
1865 | },
1866 | "uri-js": {
1867 | "version": "4.4.1",
1868 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
1869 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
1870 | "requires": {
1871 | "punycode": "^2.1.0"
1872 | }
1873 | },
1874 | "uuid": {
1875 | "version": "3.4.0",
1876 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
1877 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
1878 | },
1879 | "v8-compile-cache-lib": {
1880 | "version": "3.0.0",
1881 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz",
1882 | "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==",
1883 | "dev": true
1884 | },
1885 | "verror": {
1886 | "version": "1.10.0",
1887 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1888 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1889 | "requires": {
1890 | "assert-plus": "^1.0.0",
1891 | "core-util-is": "1.0.2",
1892 | "extsprintf": "^1.2.0"
1893 | }
1894 | },
1895 | "webidl-conversions": {
1896 | "version": "3.0.1",
1897 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1898 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
1899 | },
1900 | "whatwg-url": {
1901 | "version": "5.0.0",
1902 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1903 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
1904 | "requires": {
1905 | "tr46": "~0.0.3",
1906 | "webidl-conversions": "^3.0.0"
1907 | }
1908 | },
1909 | "wrappy": {
1910 | "version": "1.0.2",
1911 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1912 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
1913 | },
1914 | "xmldoc": {
1915 | "version": "1.1.2",
1916 | "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz",
1917 | "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==",
1918 | "requires": {
1919 | "sax": "^1.2.1"
1920 | }
1921 | },
1922 | "yallist": {
1923 | "version": "4.0.0",
1924 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1925 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
1926 | },
1927 | "yn": {
1928 | "version": "3.1.1",
1929 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
1930 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
1931 | "dev": true
1932 | }
1933 | }
1934 | }
1935 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mvp-monitor",
3 | "version": "1.0.0",
4 | "description": "Microsoft MVP Monitor",
5 | "main": "index.js",
6 | "scripts": {
7 | "grab": "node ./dist",
8 | "grab-ts": "ts-node ./src",
9 | "build": "tslint -p . && tsc -p .",
10 | "pnp:deploy": "powershell ./provisioning/Deploy.ps1",
11 | "pnp:connect": "sp-auth init --path ./config/private.json"
12 | },
13 | "repository": {
14 | "type": "git",
15 | "url": "git+https://github.com/koltyakov/mvp-monitor.git"
16 | },
17 | "author": "",
18 | "license": "MIT",
19 | "bugs": {
20 | "url": "https://github.com/koltyakov/mvp-monitor/issues"
21 | },
22 | "homepage": "https://github.com/koltyakov/mvp-monitor#readme",
23 | "devDependencies": {
24 | "@types/cheerio": "^0.22.31",
25 | "@types/node": "^17.0.17",
26 | "@types/node-fetch": "^3.0.3",
27 | "ts-node": "^10.5.0",
28 | "tslint": "^6.1.3",
29 | "typescript": "^4.5.5"
30 | },
31 | "dependencies": {
32 | "@pnp/sp-commonjs": "^2.12.0",
33 | "cheerio": "^1.0.0-rc.10",
34 | "crc-32": "^1.2.1",
35 | "node-fetch": "^2.6.7",
36 | "node-sp-auth-config": "^3.0.2",
37 | "sp-pnp-node": "^3.0.1"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/provisioning/Deploy.ps1:
--------------------------------------------------------------------------------
1 | [CmdletBinding()]
2 | Param(
3 | [Parameter(Mandatory=$False)]
4 | [string]$Template = "$PSScriptRoot\templates\Model.xml",
5 |
6 | [Parameter(Mandatory=$False)]
7 | [string]$Handlers = "All"
8 | );
9 |
10 | Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force;
11 |
12 | . "$PSScriptRoot\Settings.ps1";
13 | . "$PSScriptRoot\lib\Functions.ps1";
14 |
15 | # Private config
16 | $PrivateFilePath = If ($env:PRIVATE_JSON) { $env:PRIVATE_JSON } Else { "$PSScriptRoot\..\config\private.json" } # env var or default setting
17 | Try { Resolve-Path -Path $PrivateFilePath -ErrorAction Stop | Out-Null; } Catch { sp-auth init -p $PrivateFilePath; } # test path if no private file start wizard
18 |
19 | $SETTINGS_PrivateFilePath = Resolve-Path -Path $PrivateFilePath; # Private connection config file path
20 |
21 | Set-PnPTraceLog -on -level Debug;
22 |
23 | $StartTime = Get-Date;
24 |
25 | $Context = Get-SpAuthContext $SETTINGS_PrivateFilePath;
26 | $Connection = Get-SpConnection $Context.siteUrl $Context;
27 |
28 | Print-InfoMessage "Applying template to $($Context.siteUrl)";
29 |
30 | Apply-PnPProvisioningTemplate `
31 | -Path $Template `
32 | -ProvisionContentTypesToSubWebs:$True `
33 | -ProvisionFieldsToSubWebs:$True `
34 | -Connection $Connection `
35 | -Handlers $Handlers;
36 |
37 | $EndTime = Get-Date;
38 | $TimeSpan = New-TimeSpan $StartTime $EndTime;
39 | Print-SuccessMessage "Execution time: $timespan";
40 |
--------------------------------------------------------------------------------
/provisioning/Install.ps1:
--------------------------------------------------------------------------------
1 | [CmdletBinding()]
2 | Param(
3 | [Parameter(Mandatory=$False,Position=1)]
4 | [string]$Module = "SPO"
5 | );
6 |
7 | Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force;
8 |
9 | . "$PSScriptRoot\lib\Functions.ps1";
10 |
11 | Install-PackageProvider -Name NuGet -Force -Scope "CurrentUser" | Out-Null;
12 |
13 | $PnPModuleName = "SharePointPnPPowerShell$Module";
14 |
15 | $modules = Get-Module -Name $PnPModuleName -ListAvailable;
16 | If ($null -eq $modules) {
17 | $rmod = Get-Module -Name SharePointPnPPowerShell* -ListAvailable;
18 | If ($null -ne $rmod) {
19 | Remove-Module -ModuleInfo $rmod -Force;
20 | Uninstall-Module -Name $rmod.Name;
21 | }
22 | Install-Module -Name $PnPModuleName -Scope CurrentUser -Force -MaximumVersion 2.28.1807.0;
23 | Import-Module -Name $PnPModuleName -DisableNameChecking;
24 | }
25 |
26 | # Additional dependencies
27 | $Dependencies = @(
28 | "Set-PsEnv"
29 | );
30 |
31 | Foreach ($Module in $Dependencies) {
32 | Install-CustomModule($Module)
33 | }
34 |
--------------------------------------------------------------------------------
/provisioning/Settings.ps1:
--------------------------------------------------------------------------------
1 | . "$PSScriptRoot\lib\Functions.ps1";
2 |
3 | # Read .env from the root
4 | Set-PsEnv;
5 |
--------------------------------------------------------------------------------
/provisioning/lib/Functions.ps1:
--------------------------------------------------------------------------------
1 | . "$PSScriptRoot\Functions\PsUtils.ps1";
2 | . "$PSScriptRoot\Functions\JsConfigs.ps1";
3 | . "$PSScriptRoot\Functions\AuthContext.ps1";
4 |
--------------------------------------------------------------------------------
/provisioning/lib/Functions/AuthContext.ps1:
--------------------------------------------------------------------------------
1 | Function Get-SpAuthContext {
2 | [CmdletBinding()]
3 |
4 | param (
5 | [Parameter(Mandatory=$False)]
6 | [string] $Path = ".\config\private.json"
7 | );
8 |
9 | Process {
10 | Write-Host "Auth config locations:" $Path
11 |
12 | $Context = $null;
13 |
14 | $env:SPAUTH_ENV = "production"; # Prevent SPAuth interactive mode
15 | $SpAuthRead = ".\node_modules\.bin\sp-auth read -p ""$Path""";
16 |
17 | if (Test-Path $Path) {
18 |
19 | # Write-Host $SpAuthRead;
20 |
21 | $Context = Invoke-Expression $SpAuthRead | ConvertFrom-Json;
22 |
23 | $AppId = $Context.authOptions.clientId;
24 | if ($null -ne $AppId)
25 | {
26 | $AppSecret = $Context.authOptions.clientSecret;
27 | $Context | Add-Member -NotePropertyName AppId -NotePropertyValue $AppId;
28 | $Context | Add-Member -NotePropertyName AppSecret -NotePropertyValue $AppSecret;
29 | }
30 |
31 | $Username = $Context.authOptions.username;
32 | if ($null -ne $Username)
33 | {
34 | $Password = $Context.authOptions.password;
35 | $secPassword = ConvertTo-SecureString -String $Password -AsPlainText -Force;
36 | $Credentials = New-Object System.Management.Automation.PSCredential ($Username, $secPassword);
37 | $Context | Add-Member -NotePropertyName Credentials -NotePropertyValue $Credentials;
38 | }
39 |
40 | $TenantHostUrl = ([System.Uri]$Context.siteUrl).Scheme + "://" + ([System.Uri]$Context.siteUrl).IdnHost;
41 | $TenantAdminUrl = $TenantHostUrl.Replace(".sharepoint.com", "-admin.sharepoint.com");
42 |
43 | $Context | Add-Member -NotePropertyName TenantHostUrl -NotePropertyValue $TenantHostUrl;
44 | $Context | Add-Member -NotePropertyName TenantAdminUrl -NotePropertyValue $TenantAdminUrl;
45 | }
46 |
47 | $Context;
48 | }
49 | }
50 |
51 | Function Get-SpConnection {
52 | [CmdletBinding()]
53 |
54 | param (
55 | [Parameter(Mandatory=$True)]
56 | [string] $Url,
57 | [Parameter(Mandatory=$True)]
58 | [PSObject] $Context
59 | );
60 |
61 | Process {
62 | if ($null -ne $Context.Credentials)
63 | {
64 | $Connection = Connect-PnPOnline -Url $Url -Credentials $Context.Credentials -ReturnConnection;
65 | }
66 |
67 | if ($null -ne $Context.AppId)
68 | {
69 | $Connection = Connect-PnPOnline -Url $Url -AppId $Context.AppId -AppSecret $Context.AppSecret -ReturnConnection;
70 | }
71 |
72 | if ($null -eq $Connection)
73 | {
74 | $Connection = Connect-PnPOnline -Url $Url -UseWebLogin -ReturnConnection;
75 | }
76 |
77 | $Connection;
78 | }
79 | }
--------------------------------------------------------------------------------
/provisioning/lib/Functions/JsConfigs.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | const [ root, conf ] = process.argv.slice(2);
4 |
5 | const json = require(path.join(root, conf));
6 |
7 | console.log(JSON.stringify(json).toString('utf8'));
--------------------------------------------------------------------------------
/provisioning/lib/Functions/JsConfigs.ps1:
--------------------------------------------------------------------------------
1 | Function Read-JsConfig {
2 | [CmdletBinding()]
3 | param (
4 | [Parameter(Mandatory=$True)]
5 | [string] $ConfigPath
6 | );
7 |
8 | Process {
9 | If ($ConfigPath.EndsWith(".js")) {
10 | $JSON = Invoke-Expression "node $PSScriptRoot\JsConfigs.js $((Get-Location).Path) $ConfigPath" | ConvertFrom-Json;
11 | }
12 | Else {
13 | $JSON = Get-Content $ConfigPath -Encoding UTF8 | ConvertFrom-Json;
14 | }
15 | $JSON;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/provisioning/lib/Functions/PsUtils.ps1:
--------------------------------------------------------------------------------
1 | Function Print-InfoMessage($message) {
2 | Write-Host -Foregroundcolor Cyan $message
3 | }
4 |
5 | Function Print-SuccessMessage($message) {
6 | Write-Host -Foregroundcolor Green $message;
7 | }
8 |
9 | Function Print-WarningMessage($message) {
10 | Write-Host -Foregroundcolor Yellow $message;
11 | }
12 |
13 | Function Print-ErrorMessage($message) {
14 | Write-Host -Foregroundcolor Red "";
15 | Write-Host -Foregroundcolor Red "There was an error running the script. ";
16 | Write-Host -Foregroundcolor Red $message;
17 | Write-Host -Foregroundcolor Red "";
18 | }
19 |
20 | Function Install-CustomModule {
21 | [CmdletBinding()]
22 |
23 | param (
24 | [Parameter(Mandatory=$True)]
25 | [string] $PsModuleName
26 | );
27 |
28 | Process {
29 | $modules = Get-Module -Name $PsModuleName -ListAvailable;
30 | If ($null -eq $modules) {
31 | # Remove other PnP Versiong if it is PnP module
32 | If ($PsModuleName.Contains("SharePointPnPPowerShell")) {
33 | $rmod = Get-Module -Name SharePointPnPPowerShell* -ListAvailable;
34 | If ($null -ne $rmod) {
35 | Remove-Module -ModuleInfo $rmod -Force;
36 | Uninstall-Module -Name $rmod.Name;
37 | }
38 | }
39 | Install-Module -Name $PsModuleName -Scope CurrentUser -Force;
40 | Import-Module -Name $PsModuleName -DisableNameChecking;
41 | }
42 | }
43 | }
44 |
45 | Function Upgrade-CustomModule {
46 | [CmdletBinding()]
47 |
48 | param (
49 | [Parameter(Mandatory=$True)]
50 | [string] $PsModuleName
51 | );
52 |
53 | Process {
54 | $modules = Get-Module -Name $PsModuleName -ListAvailable;
55 | If ($null -eq $modules) {
56 | # Remove other PnP Versiong if it is PnP module
57 | If ($PsModuleName.Contains("SharePointPnPPowerShell")) {
58 | $rmod = Get-Module -Name SharePointPnPPowerShell* -ListAvailable;
59 | If ($null -ne $rmod) {
60 | Remove-Module -ModuleInfo $rmod -Force;
61 | Uninstall-Module -Name $rmod.Name;
62 | }
63 | }
64 | Install-Module -Name $PsModuleName -Scope CurrentUser -Force;
65 | Import-Module -Name $PsModuleName -DisableNameChecking;
66 | }
67 | }
68 | }
--------------------------------------------------------------------------------
/provisioning/script/clean.pnp.ts:
--------------------------------------------------------------------------------
1 | import { sp } from '@pnp/sp';
2 |
3 | const solutionName = `MVP-MONITOR`;
4 |
5 | (async () => {
6 | const web = sp.web;
7 |
8 | console.log(`\nLists`);
9 | const lists = await web.lists
10 | .get()
11 | .then(ll => ll.filter(l => l.Description.indexOf(solutionName) !== -1));
12 | for (const list of lists) {
13 | console.log(` ${list.Title}`);
14 | await web.lists.getById(list.Id).delete();
15 | }
16 |
17 | console.log(`\nContent types`);
18 | const cts = await web.contentTypes.filter(`Group eq '${solutionName}'`).get();
19 | for (const ct of cts) {
20 | console.log(` ${ct.Name}`);
21 | await web.contentTypes
22 | .getById(ct.Id.StringValue)
23 | .delete()
24 | .catch(_ => {
25 | console.log(` Rerun needed, as ${ct.Name} is used for inheritence`);
26 | });
27 | }
28 |
29 | console.log(`\nFields`);
30 | const fields = await web.fields.filter(`Group eq '${solutionName}'`).get();
31 | for (const field of fields) {
32 | console.log(` ${field.Title}`);
33 | await web.fields.getById(field.Id).delete();
34 | }
35 |
36 | console.log('\nDone');
37 |
38 | })().catch(console.warn);
39 |
--------------------------------------------------------------------------------
/provisioning/templates/Model.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 | MVP-MONITOR
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/reports/mvp-stats-mobile.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koltyakov/mvp-monitor/b23c78b94a865e0fd51f682be767f526bfab3d8e/reports/mvp-stats-mobile.pbix
--------------------------------------------------------------------------------
/reports/mvp-stats.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koltyakov/mvp-monitor/b23c78b94a865e0fd51f682be767f526bfab3d8e/reports/mvp-stats.pbix
--------------------------------------------------------------------------------
/src/api.ts:
--------------------------------------------------------------------------------
1 | import fetch from 'node-fetch';
2 | import { load } from 'cheerio';
3 |
4 | import { handleResponse, timeoutPromise } from './utils';
5 | import { MVP } from './interface';
6 |
7 | const portalUrl = 'https://mvp.microsoft.com';
8 |
9 | export const fetchMVPsPage = (page: number = 1, retries: number = 3): Promise<{ data: MVP[], hasNext: boolean; }> => {
10 | const url = `${portalUrl}/en-us/MvpSearch?&kw=&ps=48&pn=${page}`;
11 | return fetch(url, {
12 | method: 'GET',
13 | headers: {
14 | 'Accept': 'text/html',
15 | 'Content-Type': 'text/html',
16 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
17 | }
18 | })
19 | .then((r) => handleResponse(r))
20 | .then((r) => r.text())
21 | .then((html) => {
22 | const $ = load(html);
23 | const data: MVP[] = $('.profileListItem').toArray().map((node) => {
24 | return {
25 | id: $(node).find('.profileListItemFullName > span > a').attr('href').split('-').slice(-1)[0],
26 | name: $(node).find('.profileListItemFullName > span > a').text(),
27 | categories: $(node).find('.profileListItemCompetency > .subItemContent').text().trim().split(', '),
28 | country: $(node).find('.profileListItemLocation > .subItemContent').text().trim()
29 | };
30 | });
31 | const hasNext = $('.pager_items > a:last-child').find('img').length !== 0;
32 | return { data, hasNext };
33 | })
34 | .catch((error) => {
35 | if (retries > 0) {
36 | retries -= 1;
37 | // console.log(` retry, ${retries} left`);
38 | return fetchMVPsPage(page, retries);
39 | }
40 | throw new Error(error);
41 | });
42 | };
43 |
44 | export const fetchAllMvps = async (
45 | data: MVP[] = [],
46 | page: number = 1,
47 | progress?: (page: number) => void,
48 | timeout?: number
49 | ): Promise => {
50 | if (progress) {
51 | progress(page);
52 | }
53 | const { data: mvps, hasNext } = await fetchMVPsPage(page);
54 | data = data.concat(mvps);
55 | if (hasNext) {
56 | if (typeof timeout !== 'undefined') {
57 | await timeoutPromise(1000);
58 | }
59 | return fetchAllMvps(data, page + 1, progress);
60 | }
61 | return data;
62 | };
63 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { fetchAllMvps } from './api';
2 | import { trimNames } from './map';
3 | import { dumpOnDisk, dumpToSP } from './utils';
4 |
5 | fetchAllMvps([], 1, (p) => console.log(`Fetching page: ${p}`), 0)
6 | .then(dumpOnDisk)
7 | .then(trimNames)
8 | .then(dumpToSP)
9 | .catch((error) => console.error(error));
10 |
--------------------------------------------------------------------------------
/src/interface.ts:
--------------------------------------------------------------------------------
1 | export interface MVP {
2 | id: string;
3 | name?: string;
4 | categories: string[];
5 | country: string;
6 | }
7 |
8 | export interface PivotItem {
9 | category: string;
10 | country: string;
11 | amount: number;
12 | }
13 |
--------------------------------------------------------------------------------
/src/map.ts:
--------------------------------------------------------------------------------
1 | import { MVP, PivotItem } from './interface';
2 |
3 | export const flattify = (mvps: MVP[]): PivotItem[] => {
4 | return mvps.reduce((pi: PivotItem[], mvp) => {
5 | const { categories, country } = mvp;
6 | categories.forEach((category) => {
7 | const item = pi.find((p) => p.category === category && p.country === country);
8 | if (item) {
9 | item.amount += 1;
10 | } else {
11 | pi.push({ country, category, amount: 1 });
12 | }
13 | });
14 | return pi;
15 | }, []);
16 | };
17 |
18 | export const trimNames = (mvps: MVP[]): MVP[] => {
19 | return mvps.map((mvp) => {
20 | delete mvp.name;
21 | return mvp;
22 | });
23 | };
24 |
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | import * as fs from 'fs';
2 | import * as path from 'path';
3 | import { Response } from 'node-fetch';
4 | import { sp, Web } from '@pnp/sp-commonjs';
5 | import { PnpNode } from 'sp-pnp-node';
6 | import { AuthConfig } from 'node-sp-auth-config';
7 | import * as crc from 'crc-32';
8 |
9 | export const handleResponse = (response: Response): Response => {
10 | if (!response.ok) {
11 | throw Error(response.statusText);
12 | }
13 | return response;
14 | };
15 |
16 | export const dumpOnDisk = (data: T[]): T[] => {
17 | const folder = path.join(process.cwd(), './data');
18 | if (!fs.existsSync(folder)) {
19 | fs.mkdirSync(folder);
20 | }
21 | const filePath = path.join(folder, `${new Date().toISOString().replace(/:/g, '-')}.json`);
22 | fs.writeFileSync(filePath, JSON.stringify(data, null, 2), { encoding: 'utf8' });
23 | return data;
24 | };
25 |
26 | export const dumpToSP = async (data: T[]): Promise => {
27 | const { siteUrl, authOptions } = await new AuthConfig().getContext();
28 | const nodeFetch = new PnpNode({ siteUrl, authOptions });
29 | sp.setup({
30 | sp: {
31 | fetchClientFactory: () => nodeFetch
32 | }
33 | });
34 | const fetchDate = new Date();
35 | const web = Web(siteUrl);
36 | const list = web.lists.getByTitle('MVP Stats');
37 | const items = await list.items.select('Id').filter(`Title eq '${dayFormat(fetchDate)}'`).get();
38 | const stats = JSON.stringify(data);
39 | const payload = {
40 | Title: dayFormat(fetchDate),
41 | MvpStats: stats,
42 | StatsCRC: crc.str(stats).toString(16),
43 | StatsDate: fetchDate.toISOString()
44 | };
45 | if (items.length > 0) {
46 | await list.items.getById(items[0].Id).update(payload);
47 | } else {
48 | await list.items.add(payload);
49 | }
50 | return data;
51 | };
52 |
53 | export const dayFormat = (d: Date = new Date()): string => {
54 | return `${d.getFullYear()}-${`${d.getMonth() + 1}`.padStart(2, '0')}-${`${d.getDate()}`.padStart(2, '0')}`;
55 | };
56 |
57 | export const timeoutPromise = (timeout: number): Promise => {
58 | return new Promise((resolve) => setTimeout(resolve, timeout));
59 | };
60 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2017",
4 | "module": "commonjs",
5 | "lib": ["es2017", "dom"],
6 | "sourceMap": true,
7 | "declaration": true,
8 | "moduleResolution": "node",
9 | "noImplicitAny": false,
10 | "removeComments": true,
11 | "newLine": "LF",
12 | "skipLibCheck": true,
13 | "types": ["node"],
14 | "outDir": "dist"
15 | },
16 | "include": [
17 | "src/**/*.ts",
18 | "test/**/*.ts"
19 | ],
20 | "exclude": [
21 | "node_modules",
22 | "dist",
23 | "test"
24 | ]
25 | }
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tslint:latest",
3 | "rules": {
4 | "semicolon": [true, "always", "ignore-interfaces"],
5 | "space-before-function-paren": false,
6 | "trailing-comma": true,
7 | "no-unused-variable": false,
8 | "strict-type-predicates": false,
9 | "no-console": false
10 | }
11 | }
--------------------------------------------------------------------------------