Commit edf522c31e76c81bdce9f0e9ba22dce45d0b1065

Authored by Adhidarma Hadiwinoto
1 parent e24aa85b3a
Exists in master

ESLINT on pull

Showing 4 changed files with 1715 additions and 415 deletions Side-by-side Diff

1 1 module.exports = {
2   - "env": {
3   - "commonjs": true,
4   - "es6": true,
5   - "node": true
  2 + env: {
  3 + browser: true,
  4 + commonjs: true,
  5 + es2021: true,
  6 + node: true,
6 7 },
7   - "extends": "eslint:recommended",
8   - "globals": {
9   - "Atomics": "readonly",
10   - "SharedArrayBuffer": "readonly"
  8 + extends: [
  9 + 'airbnb-base',
  10 + ],
  11 + parserOptions: {
  12 + ecmaVersion: 13,
11 13 },
12   - "parserOptions": {
13   - "ecmaVersion": 2018
  14 + rules: {
  15 + indent: ['error', 4],
14 16 },
15   - "rules": {
16   - }
17   -};
18 17 \ No newline at end of file
  18 +};
  1 +/* eslint-disable no-param-reassign */
1 2 const MODULE_NAME = 'KOMODO-SDK.PULL';
2 3  
3 4 const DEFAULT_REQUEST_TIMEOUT_MS = 20 * 1000;
... ... @@ -6,27 +7,29 @@ const IS_DEBUG = process.env.KOMODO_SDK_DEBUG_PULL;
6 7 const request = require('request');
7 8 const stringify = require('json-stringify-pretty-compact');
8 9 const logger = require('tektrans-logger');
  10 +const urljoin = require('url-join');
9 11  
10 12 const config = require('../config');
11 13 const matrix = require('../matrix');
12 14  
13 15 if (config.control_panel && (config.control_panel.listen_port || config.control_panel.port)) {
  16 + // eslint-disable-next-line global-require
14 17 require('../control-panel');
15 18 }
16 19  
17 20 const heartbeat = require('../heartbeat');
18   -const core_url = require('../core-url');
  21 +const coreUrl = require('../core-url');
19 22  
20 23 const taskArchive = require('./task-archive');
21 24  
22 25 const MAX_SLEEP_BEFORE_RESEND_MS = 500;
23 26 const DELAY_AFTER_NO_TASK_MS = 500;
24 27  
25   -let is_on_delay_after_no_task = false;
  28 +let isOnDelayAfterNoTask = false;
26 29 let pullTaskLocked = false;
27 30  
28 31 if (config.handler_name) {
29   - process.title = "KOMODO-GW@" + config.handler_name;
  32 + process.title = `KOMODO-GW@${config.handler_name}`;
30 33 }
31 34  
32 35 matrix.sdk_pending_tasks_count = 0;
... ... @@ -47,203 +50,188 @@ if (!matrix.sdk_pending_with_response_tasks) {
47 50  
48 51 heartbeat.setModuleType('gateway');
49 52  
50   -var partner;
  53 +let partner;
51 54  
52 55 function onNoTask() {
53   - is_on_delay_after_no_task = true;
54   - setTimeout(function() {
55   - is_on_delay_after_no_task = false;
56   - }, DELAY_AFTER_NO_TASK_MS)
  56 + isOnDelayAfterNoTask = true;
  57 + setTimeout(() => {
  58 + isOnDelayAfterNoTask = false;
  59 + }, DELAY_AFTER_NO_TASK_MS);
57 60 }
58 61  
59 62 function setPartner(_partner) {
60 63 partner = _partner;
61 64 }
62 65  
63   -function pullTask() {
64   - if (isPaused()) {
65   - if (IS_DEBUG) {
66   - logger.verbose(`${MODULE_NAME} 76370FE5: PULL TASK paused`);
67   - }
68   - return;
69   - }
70   -
71   - if (is_on_delay_after_no_task && !config.disable_delay_after_no_task) {
72   - return;
73   - }
74   -
75   - if (!partner) {
76   - if (IS_DEBUG) {
77   - logger.verbose(`${MODULE_NAME} FFB54A2A: PULL TASK disabled because of undefined partner`);
78   - }
  66 +function isPaused() {
  67 + return matrix.paused;
  68 +}
79 69  
80   - return;
81   - }
  70 +function getRemoteProduct(product) {
  71 + const remoteProduct = config.remote_products[product];
  72 + return remoteProduct || product;
  73 +}
82 74  
83   - if (matrix && matrix.not_ready) {
84   - if (IS_DEBUG) {
85   - logger.verbose(`${MODULE_NAME} 68BDA23B: PULL TASK paused because of gateway is not ready`)
86   - }
87   - return;
88   - }
  75 +function incrementCounterTrx() {
  76 + matrix.counter.trx += 1;
  77 +}
89 78  
90   - let core_pull_task_url;
  79 +function updateTaskOnMatrix(trxId, rc) {
  80 + trxId = Number(trxId);
91 81  
92   - if (core_url) {
93   - core_pull_task_url = core_url + '/pull/task';
94   - }
95   - else if (config && config.pull_url && config.pull_url.task) {
96   - core_pull_task_url = config.pull_url.task.replace('<CORE_APIKEY>', config.core_apikey);
  82 + const unresponsedTaskIdx = matrix.sdk_unresponsed_tasks.indexOf(trxId);
  83 + if (unresponsedTaskIdx >= 0) {
  84 + matrix.sdk_unresponsed_tasks.splice(unresponsedTaskIdx, 1);
97 85 }
  86 + matrix.sdk_unresponsed_tasks_count = matrix.sdk_unresponsed_tasks.length;
98 87  
99   - if (!core_pull_task_url) {
100   - logger.warn(`${MODULE_NAME} 5F0681B7: Unknown CORE task url`);
101   - return;
102   - }
  88 + if (rc === '68' || rc === 68) {
  89 + const pendingWithResponseTaskIdx = matrix.sdk_pending_with_response_tasks.indexOf(trxId);
  90 + if (pendingWithResponseTaskIdx < 0) {
  91 + matrix.sdk_pending_with_response_tasks.push(trxId);
  92 + // eslint-disable-next-line max-len
  93 + matrix.sdk_pending_with_response_tasks_count = matrix.sdk_pending_with_response_tasks.length;
  94 + }
  95 + } else {
  96 + const pendingTaskIdx = matrix.sdk_pending_tasks.indexOf(trxId);
  97 + if (pendingTaskIdx >= 0) {
  98 + matrix.sdk_pending_tasks.splice(pendingTaskIdx, 1);
  99 + matrix.sdk_pending_tasks_count = matrix.sdk_pending_tasks.length;
  100 + }
103 101  
104   - //if (config.pulltask_mutex && pullTaskLocked) {
105   - if (pullTaskLocked) {
106   - if (IS_DEBUG) {
107   - logger.verbose(`${MODULE_NAME} B81F0CCD: PULL TASK paused because LOCKED`);
  102 + const pendingWithResponseTaskIdx = matrix.sdk_pending_with_response_tasks.indexOf(trxId);
  103 + if (pendingWithResponseTaskIdx >= 0) {
  104 + matrix.sdk_pending_with_response_tasks.splice(pendingWithResponseTaskIdx, 1);
  105 + // eslint-disable-next-line max-len
  106 + matrix.sdk_pending_with_response_tasks_count = matrix.sdk_pending_with_response_tasks.length;
108 107 }
109   - return;
110 108 }
111   - pullTaskLocked = true;
  109 +}
112 110  
113   - const body_or_qs = {
114   - handler: config.handler_name,
115   - products: (config.products || []).join(','),
116   - locations: config.locations && config.locations.length ? config.locations.join(',') : 'ALL',
117   - advice_url: (config && config.push_server && config.push_server.apikey && config.push_server.advice && config.push_server.advice.url && config.push_server.advice.port) ? config.push_server.advice.url : null,
118   - api_url: (config && config.apiserver && config.apiserver.apikey && config.apiserver.url) ? config.apiserver.url : null,
119   - cp_url: (config && config.control_panel && config.control_panel.url) ? config.control_panel.url : null,
120   - komodosdk_type: matrix.komodosdk_type,
121   - komodosdk_version: matrix.komodosdk_version
122   - };
  111 +function putTaskToMatrix(task) {
  112 + const trxId = Number(task.trx_id);
123 113  
124   - let options = {
125   - url: core_pull_task_url,
126   - timeout: config.request_timeout || DEFAULT_REQUEST_TIMEOUT_MS,
  114 + if (matrix.sdk_unresponsed_tasks.indexOf(trxId) < 0) {
  115 + matrix.sdk_unresponsed_tasks.push(trxId);
  116 + matrix.sdk_unresponsed_tasks_count = matrix.sdk_unresponsed_tasks.length;
127 117 }
128 118  
129   - if (config.pull_task_use_post) {
130   - //logger.verbose('Requesting PULL-TASK to CORE using POST');
131   - if (IS_DEBUG) {
132   - logger.verbose(`${MODULE_NAME} CB855B30: PULL TASK using HTTP POST`);
133   - }
134   - options.method = 'POST';
135   - options.form = body_or_qs;
136   - }
137   - else {
138   - if (IS_DEBUG) {
139   - logger.verbose(`${MODULE_NAME} BA2EF935: PULL TASK using HTTP GET`);
140   - }
141   - options.method = 'GET';
142   - options.qs = body_or_qs;
  119 + if (matrix.sdk_pending_tasks.indexOf(trxId) < 0) {
  120 + matrix.sdk_pending_tasks.push(trxId);
  121 + matrix.sdk_pending_tasks_count = matrix.sdk_pending_tasks.length;
143 122 }
  123 +}
144 124  
145   - if (config && config.debug_request_task_to_core) {
146   - logger.verbose(`${MODULE_NAME} 0642E25C: Requesting task to CORE`, {url: options.url, method: options.method, body_or_qs: body_or_qs});
  125 +function replaceRc(originalRc) {
  126 + if (!config || !config.replace_rc) {
  127 + return originalRc;
147 128 }
148 129  
149   - const start_time = new Date();
150   - request(options, function(error, response, body) {
151   - pullTaskLocked = false;
152   -
153   - const lame_limit = 10 * 1000;
154   - const delta_time = new Date() - start_time;
155   - if (delta_time > lame_limit) {
156   - logger.warn(`${MODULE_NAME} B892DC43: LAME-PULL: PULL response from CORE exceeds ` + lame_limit + ' secs', {delta_time: delta_time});
157   - }
  130 + return config.replace_rc[originalRc] || originalRc;
  131 +}
158 132  
159   - if (error) {
160   - if (matrix.core_is_healthy) {
161   - logger.warn(`${MODULE_NAME} FB762F4A: Error pulling task from CORE`, {error: error});
162   - }
163   - matrix.core_is_healthy = false;
164   - onNoTask();
165   - return;
166   - }
  133 +function report(data, xid) {
  134 + let corePullReportUrl;
167 135  
168   - if (response.statusCode != 200) {
169   - if (matrix.core_is_healthy) {
170   - logger.warn(`${MODULE_NAME} 8943EECB: CORE http response status code for pull task is not 200`, {http_response_status: response.statusCode});
171   - }
172   - matrix.core_is_healthy = false;
173   - onNoTask();
174   - return;
175   - }
  136 + if (data && data.trx_id && data.rc) {
  137 + updateTaskOnMatrix(data.trx_id, data.rc);
  138 + }
176 139  
177   - if (!matrix.core_is_healthy) {
178   - logger.verbose(`${MODULE_NAME} 099F5B3C: CORE is healthy`);
179   - }
180   - matrix.core_is_healthy = true;
  140 + if (coreUrl) {
  141 + corePullReportUrl = urljoin(coreUrl, '/pull/report');
  142 + } else if (config && config.pull_url && config.pull_url.report) {
  143 + corePullReportUrl = config.pull_url.report.replace('<CORE_APIKEY>', config.core_apikey);
  144 + }
181 145  
182   - if (body === 'NONE') {
183   - onNoTask();
184   - return;
185   - }
  146 + if (!corePullReportUrl) {
  147 + logger.warn(`${MODULE_NAME} C23CC601: Unknown CORE report url`);
  148 + return;
  149 + }
186 150  
187   - if (body === 'LOCKED') {
188   - return;
  151 + if (
  152 + config && config.push_server && config.push_server.apikey
  153 + && config.push_server.advice && config.push_server.advice.url
  154 + && config.push_server.advice.port
  155 + ) {
  156 + if (!data.misc) {
  157 + data.misc = {};
189 158 }
190 159  
191   - forwardCoreTaskToPartner(body, start_time);
192   - });
193   -}
194   -
195   -function putTaskToMatrix(task) {
196   - const trx_id = Number(task.trx_id);
197   -
198   - if (matrix.sdk_unresponsed_tasks.indexOf(trx_id) < 0) {
199   - matrix.sdk_unresponsed_tasks.push(trx_id);
200   - matrix.sdk_unresponsed_tasks_count = matrix.sdk_unresponsed_tasks.length;
  160 + data.misc.advice_url = config.push_server.advice.url;
201 161 }
202 162  
203   - if (matrix.sdk_pending_tasks.indexOf(trx_id) < 0) {
204   - matrix.sdk_pending_tasks.push(trx_id);
205   - matrix.sdk_pending_tasks_count = matrix.sdk_pending_tasks.length;
  163 + let trxId = Number(data.trx_id) - (Number(config.sdk_trx_id_adder) || 0);
  164 + if (trxId <= 0) {
  165 + logger.warn(`${MODULE_NAME} 6A8C7303: REPORT: calculated trx_id is a negative number, using uncalculated trx_id`, {
  166 + uncalculated: data.trx_id,
  167 + calculated: trxId,
  168 + sdk_trx_id_adder: config.sdk_trx_id_adder,
  169 + });
  170 + trxId = data.trx_id;
206 171 }
207   -}
208 172  
209   -function updateTaskOnMatrix(trx_id, rc) {
210   - trx_id = Number(trx_id);
  173 + const options = {
  174 + url: corePullReportUrl,
  175 + form: {
  176 + trx_id: trxId,
  177 + rc: replaceRc(data.rc),
  178 + rc_from_handler: data.rc_from_handler,
  179 + message: typeof data.message === 'string' ? data.message : stringify(data.message),
  180 + handler: config.handler_name,
  181 + sn: data.sn,
  182 + amount: data.amount,
  183 + balance: data.balance,
  184 + raw: data.raw,
  185 + misc: data.misc,
  186 + product: data.product
  187 + || (data.misc && data.misc.task && typeof data.misc.task.product === 'string' && data.misc.task.product)
  188 + || null,
  189 + remote_product: data.remote_product
  190 + || (data.misc && data.misc.task && typeof data.misc.task.remote_product === 'string' && data.misc.task.remote_product)
  191 + || null,
  192 + detail: data.detail || null,
  193 + },
  194 + };
211 195  
212   - const unresponsed_task_idx = matrix.sdk_unresponsed_tasks.indexOf(trx_id);
213   - if (unresponsed_task_idx >= 0) {
214   - matrix.sdk_unresponsed_tasks.splice(unresponsed_task_idx, 1);
  196 + if (!config.do_not_verbose_log_report) {
  197 + logger.verbose(`${MODULE_NAME} 2110168C: Report to CORE using HTTP POST`, { xid });
215 198 }
216   - matrix.sdk_unresponsed_tasks_count = matrix.sdk_unresponsed_tasks.length;
217 199  
218   - if (rc == '68') {
219   - const pending_with_response_tasks_idx = matrix.sdk_pending_with_response_tasks.indexOf(trx_id);
220   - if (pending_with_response_tasks_idx < 0) {
221   - matrix.sdk_pending_with_response_tasks.push(trx_id);
222   - matrix.sdk_pending_with_response_tasks_count = matrix.sdk_pending_with_response_tasks.length;
223   - }
224   - }
225   - else {
226   - const pending_task_idx = matrix.sdk_pending_tasks.indexOf(trx_id);
227   - if (pending_task_idx >= 0) {
228   - matrix.sdk_pending_tasks.splice(pending_task_idx, 1);
229   - matrix.sdk_pending_tasks_count = matrix.sdk_pending_tasks.length;
  200 + request.post(options, (error, response) => {
  201 + if (error) {
  202 + logger.warn(`${MODULE_NAME} B1CA595F: Error reporting to CORE`, { xid, error });
  203 + // eslint-disable-next-line no-use-before-define
  204 + resendReport(data);
  205 + } else if (response.statusCode !== 200) {
  206 + logger.warn(`${MODULE_NAME} 4B73BD23: Error reporting to CORE, http response status is not 200`, {
  207 + xid, requestOptions: options, http_response_status: response.statusCode,
  208 + });
  209 + // eslint-disable-next-line no-use-before-define
  210 + resendReport(data);
  211 + } else if (!config.do_not_verbose_log_report) {
  212 + logger.verbose(`${MODULE_NAME} 379A25AA: Report has been sent to CORE`, { xid, requestOptions: options });
230 213 }
  214 + });
  215 +}
231 216  
232   - const pending_with_response_tasks_idx = matrix.sdk_pending_with_response_tasks.indexOf(trx_id);
233   - if (pending_with_response_tasks_idx >= 0) {
234   - matrix.sdk_pending_with_response_tasks.splice(pending_with_response_tasks_idx, 1);
235   - matrix.sdk_pending_with_response_tasks_count = matrix.sdk_pending_with_response_tasks.length;
236   - }
237   - }
  217 +function resendReport(data) {
  218 + const sleepBeforeResend = Math.round(Math.random() * MAX_SLEEP_BEFORE_RESEND_MS);
  219 + logger.verbose(`${MODULE_NAME} DEE44715: Resend report to CORE in ${sleepBeforeResend} ms`);
  220 +
  221 + setTimeout(
  222 + () => {
  223 + report(data);
  224 + },
  225 + sleepBeforeResend,
  226 + );
238 227 }
239 228  
240   -function forwardCoreTaskToPartner(coreMessage, start_time) {
  229 +function forwardCoreTaskToPartner(coreMessage, startTime) {
241 230 let task;
242 231  
243 232 try {
244 233 task = JSON.parse(coreMessage);
245   - }
246   - catch(e) {
  234 + } catch (e) {
247 235 logger.warn(`${MODULE_NAME} E757F11A: Exception on parsing CORE pull task response`, { coreMessage, eCode: e.code, eMessage: e.message });
248 236 return;
249 237 }
... ... @@ -258,8 +246,7 @@ function forwardCoreTaskToPartner(coreMessage, start_time) {
258 246 return;
259 247 }
260 248  
261   -
262   - const core_pull_request_time = start_time ? (new Date() - start_time) / 1000 : null;
  249 + const corePullRequestTime = startTime ? (new Date() - startTime) / 1000 : null;
263 250  
264 251 incrementCounterTrx();
265 252  
... ... @@ -270,116 +257,165 @@ function forwardCoreTaskToPartner(coreMessage, start_time) {
270 257  
271 258 putTaskToMatrix(task);
272 259  
273   - const created_ts = new Date(task.created);
274   - const queue_time = ((new Date()) - created_ts) / 1000;
275   - logger.info(`${MODULE_NAME} 7F131334: Got task from CORE`, { trx_id: task.trx_id, destination: task.destination, product: task.product, queue_time: queue_time, core_pull_request_time: core_pull_request_time });
  260 + const createdTs = new Date(task.created);
  261 + const queueTime = ((new Date()) - createdTs) / 1000;
  262 + logger.info(`${MODULE_NAME} 7F131334: Got task from CORE`, {
  263 + trx_id: task.trx_id,
  264 + destination: task.destination,
  265 + product: task.product,
  266 + queue_time: queueTime,
  267 + core_pull_request_time: corePullRequestTime,
  268 + });
276 269  
277   - taskArchive.get(task, function(res) {
  270 + taskArchive.get(task, (res) => {
278 271 if (res && partner.advice) {
279 272 partner.advice(task);
280   - }
281   - else {
  273 + } else {
282 274 partner.buy(task);
283 275 }
284 276 });
285 277 }
286 278  
287   -function replaceRc(original_rc) {
288   - if (!config || !config.replace_rc) {
289   - return original_rc;
  279 +function pullTask() {
  280 + if (isPaused()) {
  281 + if (IS_DEBUG) {
  282 + logger.verbose(`${MODULE_NAME} 76370FE5: PULL TASK paused`);
  283 + }
  284 + return;
290 285 }
291 286  
292   - return config.replace_rc[original_rc] || original_rc;
293   -}
  287 + if (isOnDelayAfterNoTask && !config.disable_delay_after_no_task) {
  288 + return;
  289 + }
294 290  
295   -function report(data, xid) {
  291 + if (!partner) {
  292 + if (IS_DEBUG) {
  293 + logger.verbose(`${MODULE_NAME} FFB54A2A: PULL TASK disabled because of undefined partner`);
  294 + }
296 295  
297   - let core_pull_report_url;
  296 + return;
  297 + }
298 298  
299   - if (data && data.trx_id && data.rc) {
300   - updateTaskOnMatrix(data.trx_id, data.rc);
  299 + if (matrix && matrix.not_ready) {
  300 + if (IS_DEBUG) {
  301 + logger.verbose(`${MODULE_NAME} 68BDA23B: PULL TASK paused because of gateway is not ready`);
  302 + }
  303 + return;
301 304 }
302 305  
303   - if (core_url) {
304   - core_pull_report_url = core_url + '/pull/report';
305   - } else if (config && config.pull_url && config.pull_url.report) {
306   - core_pull_report_url = config.pull_url.report.replace('<CORE_APIKEY>', config.core_apikey);
  306 + let corePullTaskUrl;
  307 +
  308 + if (coreUrl) {
  309 + corePullTaskUrl = urljoin(coreUrl, '/pull/task');
  310 + } else if (config && config.pull_url && config.pull_url.task) {
  311 + corePullTaskUrl = config.pull_url.task.replace('<CORE_APIKEY>', config.core_apikey);
307 312 }
308 313  
309   - if (!core_pull_report_url) {
310   - logger.warn(`${MODULE_NAME} C23CC601: Unknown CORE report url`);
  314 + if (!corePullTaskUrl) {
  315 + logger.warn(`${MODULE_NAME} 5F0681B7: Unknown CORE task url`);
311 316 return;
312 317 }
313 318  
314   - if (config && config.push_server && config.push_server.apikey && config.push_server.advice && config.push_server.advice.url && config.push_server.advice.port) {
315   - if (!data.misc) {
316   - data.misc = {};
  319 + if (pullTaskLocked) {
  320 + if (IS_DEBUG) {
  321 + logger.verbose(`${MODULE_NAME} B81F0CCD: PULL TASK paused because LOCKED`);
317 322 }
318   -
319   - //logger.verbose('Including advice url on report');
320   - data.misc.advice_url = config.push_server.advice.url;
  323 + return;
321 324 }
  325 + pullTaskLocked = true;
322 326  
323   - let trx_id = Number(data.trx_id) - (Number(config.sdk_trx_id_adder) || 0);
324   - if (trx_id <= 0) {
325   - logger.warn(`${MODULE_NAME} 6A8C7303: REPORT: calculated trx_id is a negative number, using uncalculated trx_id`, {uncalculated: data.trx_id, calculated: trx_id, sdk_trx_id_adder: config.sdk_trx_id_adder});
326   - trx_id = data.trx_id;
327   - }
  327 + const bodyOrQs = {
  328 + handler: config.handler_name,
  329 + products: (config.products || []).join(','),
  330 + locations: config.locations && config.locations.length ? config.locations.join(',') : 'ALL',
  331 + advice_url: (
  332 + config && config.push_server
  333 + && config.push_server.apikey && config.push_server.advice
  334 + && config.push_server.advice.url && config.push_server.advice.port
  335 + && config.push_server.advice.url
  336 + ) || null,
  337 + api_url: (
  338 + config && config.apiserver
  339 + && config.apiserver.apikey && config.apiserver.url && config.apiserver.url
  340 + ) || null,
  341 + cp_url: (
  342 + config && config.control_panel && config.control_panel.url && config.control_panel.url
  343 + ) || null,
  344 + komodosdk_type: matrix.komodosdk_type,
  345 + komodosdk_version: matrix.komodosdk_version,
  346 + };
328 347  
329   - let options = {
330   - url: core_pull_report_url,
331   - form: {
332   - trx_id: trx_id,
333   - rc: replaceRc(data.rc),
334   - rc_from_handler: data.rc_from_handler,
335   - message: typeof data.message === 'string' ? data.message : stringify(data.message),
336   - handler: config.handler_name,
337   - sn: data.sn,
338   - amount: data.amount,
339   - balance: data.balance,
340   - raw: data.raw,
341   - misc: data.misc,
342   - product: data.product || ( (data.misc && data.misc.task && typeof data.misc.task.product === 'string') ? data.misc.task.product : null ),
343   - remote_product: data.remote_product || ( (data.misc && data.misc.task && typeof data.misc.task.remote_product === 'string') ? data.misc.task.remote_product : null ),
344   - detail: data.detail || null,
  348 + const options = {
  349 + url: corePullTaskUrl,
  350 + timeout: config.request_timeout || DEFAULT_REQUEST_TIMEOUT_MS,
  351 + };
  352 +
  353 + if (config.pull_task_use_post) {
  354 + if (IS_DEBUG) {
  355 + logger.verbose(`${MODULE_NAME} CB855B30: PULL TASK using HTTP POST`);
  356 + }
  357 + options.method = 'POST';
  358 + options.form = bodyOrQs;
  359 + } else {
  360 + if (IS_DEBUG) {
  361 + logger.verbose(`${MODULE_NAME} BA2EF935: PULL TASK using HTTP GET`);
345 362 }
  363 + options.method = 'GET';
  364 + options.qs = bodyOrQs;
346 365 }
347 366  
348   - if (!config.do_not_verbose_log_report) {
349   - logger.verbose(`${MODULE_NAME} 2110168C: Report to CORE using HTTP POST`, { xid });
  367 + if (config && config.debug_request_task_to_core) {
  368 + logger.verbose(`${MODULE_NAME} 0642E25C: Requesting task to CORE`, {
  369 + url: options.url, method: options.method, body_or_qs: bodyOrQs,
  370 + });
350 371 }
351 372  
352   - request.post(options, function(error, response) {
  373 + const startTime = new Date();
  374 + request(options, (error, response, body) => {
  375 + pullTaskLocked = false;
  376 +
  377 + const lameLimit = 10 * 1000;
  378 + const deltaTime = new Date() - startTime;
  379 + if (deltaTime > lameLimit) {
  380 + logger.warn(`${MODULE_NAME} B892DC43: LAME-PULL: PULL response from CORE exceeds ${lameLimit} secs`, { deltaTime });
  381 + }
  382 +
353 383 if (error) {
354   - logger.warn(`${MODULE_NAME} B1CA595F: Error reporting to CORE`, { xid, error });
355   - resendReport(data);
  384 + if (matrix.core_is_healthy) {
  385 + logger.warn(`${MODULE_NAME} FB762F4A: Error pulling task from CORE`, { error });
  386 + }
  387 + matrix.core_is_healthy = false;
  388 + onNoTask();
  389 + return;
356 390 }
357   - else if (response.statusCode != 200) {
358   - logger.warn(`${MODULE_NAME} 4B73BD23: Error reporting to CORE, http response status is not 200`, {
359   - xid, requestOptions: options, http_response_status: response.statusCode,
360   - });
361   - resendReport(data);
  391 +
  392 + if (response.statusCode !== 200) {
  393 + if (matrix.core_is_healthy) {
  394 + logger.warn(`${MODULE_NAME} 8943EECB: CORE http response status code for pull task is not 200`, {
  395 + http_response_status: response.statusCode,
  396 + });
  397 + }
  398 + matrix.core_is_healthy = false;
  399 + onNoTask();
  400 + return;
362 401 }
363   - else if (!config.do_not_verbose_log_report) {
364   - logger.verbose(`${MODULE_NAME} 379A25AA: Report has been sent to CORE`, { xid, requestOptions: options });
  402 +
  403 + if (!matrix.core_is_healthy) {
  404 + logger.verbose(`${MODULE_NAME} 099F5B3C: CORE is healthy`);
365 405 }
366   - });
367   -}
  406 + matrix.core_is_healthy = true;
368 407  
369   -function resendReport(data) {
370   - const sleepBeforeResend = Math.round(Math.random() * MAX_SLEEP_BEFORE_RESEND_MS)
371   - logger.verbose(`${MODULE_NAME} DEE44715: Resend report to CORE in ${sleepBeforeResend} ms`);
  408 + if (body === 'NONE') {
  409 + onNoTask();
  410 + return;
  411 + }
372 412  
373   - setTimeout(
374   - function() {
375   - report(data);
376   - },
377   - sleepBeforeResend
378   - )
379   -}
  413 + if (body === 'LOCKED') {
  414 + return;
  415 + }
380 416  
381   -function isPaused() {
382   - return matrix.paused;
  417 + forwardCoreTaskToPartner(body, startTime);
  418 + });
383 419 }
384 420  
385 421 function pause() {
... ... @@ -392,17 +428,8 @@ function resume() {
392 428  
393 429 function initMatrix() {
394 430 matrix.counter = {
395   - trx: 0
396   - }
397   -}
398   -
399   -function incrementCounterTrx() {
400   - matrix.counter.trx++;
401   -}
402   -
403   -function getRemoteProduct(product) {
404   - let remoteProduct = config.remote_products[product];
405   - return remoteProduct || product;
  431 + trx: 0,
  432 + };
406 433 }
407 434  
408 435 initMatrix();
Changes suppressed. Click to show
... ... @@ -36,10 +36,13 @@
36 36 "string-natural-compare": "^2.0.2",
37 37 "tektrans-logger": "^1.2.3",
38 38 "uniqid": "^4.1.1",
  39 + "url-join": "^4.0.1",
39 40 "uuid": "^3.4.0"
40 41 },
41 42 "devDependencies": {
42   - "eslint": "^8.0.0"
  43 + "eslint": "^8.6.0",
  44 + "eslint-config-airbnb-base": "^15.0.0",
  45 + "eslint-plugin-import": "^2.25.4"
43 46 }
44 47 },
45 48 "node_modules/@cloudcmd/copy-file": {
... ... @@ -67,18 +70,18 @@
67 70 }
68 71 },
69 72 "node_modules/@eslint/eslintrc": {
70   - "version": "1.0.2",
71   - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.2.tgz",
72   - "integrity": "sha512-x1ZXdEFsvTcnbTZgqcWUL9w2ybgZCw/qbKTPQnab+XnYA2bMQpJCh+/bBzCRfDJaJdlrrQlOk49jNtru9gL/6Q==",
  73 + "version": "1.0.5",
  74 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz",
  75 + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==",
73 76 "dev": true,
74 77 "dependencies": {
75 78 "ajv": "^6.12.4",
76 79 "debug": "^4.3.2",
77   - "espree": "^9.0.0",
  80 + "espree": "^9.2.0",
78 81 "globals": "^13.9.0",
79 82 "ignore": "^4.0.6",
80 83 "import-fresh": "^3.2.1",
81   - "js-yaml": "^3.13.1",
  84 + "js-yaml": "^4.1.0",
82 85 "minimatch": "^3.0.4",
83 86 "strip-json-comments": "^3.1.1"
84 87 },
... ... @@ -86,19 +89,10 @@
86 89 "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
87 90 }
88 91 },
89   - "node_modules/@eslint/eslintrc/node_modules/argparse": {
90   - "version": "1.0.10",
91   - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
92   - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
93   - "dev": true,
94   - "dependencies": {
95   - "sprintf-js": "~1.0.2"
96   - }
97   - },
98 92 "node_modules/@eslint/eslintrc/node_modules/debug": {
99   - "version": "4.3.2",
100   - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
101   - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
  93 + "version": "4.3.3",
  94 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
  95 + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
102 96 "dev": true,
103 97 "dependencies": {
104 98 "ms": "2.1.2"
... ... @@ -112,19 +106,6 @@
112 106 }
113 107 }
114 108 },
115   - "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
116   - "version": "3.14.1",
117   - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
118   - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
119   - "dev": true,
120   - "dependencies": {
121   - "argparse": "^1.0.7",
122   - "esprima": "^4.0.0"
123   - },
124   - "bin": {
125   - "js-yaml": "bin/js-yaml.js"
126   - }
127   - },
128 109 "node_modules/@eslint/eslintrc/node_modules/ms": {
129 110 "version": "2.1.2",
130 111 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
... ... @@ -132,12 +113,12 @@
132 113 "dev": true
133 114 },
134 115 "node_modules/@humanwhocodes/config-array": {
135   - "version": "0.6.0",
136   - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz",
137   - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==",
  116 + "version": "0.9.2",
  117 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz",
  118 + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==",
138 119 "dev": true,
139 120 "dependencies": {
140   - "@humanwhocodes/object-schema": "^1.2.0",
  121 + "@humanwhocodes/object-schema": "^1.2.1",
141 122 "debug": "^4.1.1",
142 123 "minimatch": "^3.0.4"
143 124 },
... ... @@ -146,9 +127,9 @@
146 127 }
147 128 },
148 129 "node_modules/@humanwhocodes/config-array/node_modules/debug": {
149   - "version": "4.3.2",
150   - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
151   - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
  130 + "version": "4.3.3",
  131 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
  132 + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
152 133 "dev": true,
153 134 "dependencies": {
154 135 "ms": "2.1.2"
... ... @@ -169,9 +150,15 @@
169 150 "dev": true
170 151 },
171 152 "node_modules/@humanwhocodes/object-schema": {
172   - "version": "1.2.0",
173   - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
174   - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
  153 + "version": "1.2.1",
  154 + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
  155 + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
  156 + "dev": true
  157 + },
  158 + "node_modules/@types/json5": {
  159 + "version": "0.0.29",
  160 + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
  161 + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
175 162 "dev": true
176 163 },
177 164 "node_modules/a-sync-waterfall": {
... ... @@ -192,9 +179,9 @@
192 179 }
193 180 },
194 181 "node_modules/acorn": {
195   - "version": "8.5.0",
196   - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
197   - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
  182 + "version": "8.7.0",
  183 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
  184 + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
198 185 "dev": true,
199 186 "bin": {
200 187 "acorn": "bin/acorn"
... ... @@ -289,6 +276,25 @@
289 276 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
290 277 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
291 278 },
  279 + "node_modules/array-includes": {
  280 + "version": "3.1.4",
  281 + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
  282 + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
  283 + "dev": true,
  284 + "dependencies": {
  285 + "call-bind": "^1.0.2",
  286 + "define-properties": "^1.1.3",
  287 + "es-abstract": "^1.19.1",
  288 + "get-intrinsic": "^1.1.1",
  289 + "is-string": "^1.0.7"
  290 + },
  291 + "engines": {
  292 + "node": ">= 0.4"
  293 + },
  294 + "funding": {
  295 + "url": "https://github.com/sponsors/ljharb"
  296 + }
  297 + },
292 298 "node_modules/array-unique": {
293 299 "version": "0.3.2",
294 300 "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
... ... @@ -297,6 +303,23 @@
297 303 "node": ">=0.10.0"
298 304 }
299 305 },
  306 + "node_modules/array.prototype.flat": {
  307 + "version": "1.2.5",
  308 + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
  309 + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
  310 + "dev": true,
  311 + "dependencies": {
  312 + "call-bind": "^1.0.2",
  313 + "define-properties": "^1.1.3",
  314 + "es-abstract": "^1.19.0"
  315 + },
  316 + "engines": {
  317 + "node": ">= 0.4"
  318 + },
  319 + "funding": {
  320 + "url": "https://github.com/sponsors/ljharb"
  321 + }
  322 + },
300 323 "node_modules/asap": {
301 324 "version": "2.0.6",
302 325 "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
... ... @@ -436,6 +459,19 @@
436 459 "node": ">= 0.8"
437 460 }
438 461 },
  462 + "node_modules/call-bind": {
  463 + "version": "1.0.2",
  464 + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
  465 + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
  466 + "dev": true,
  467 + "dependencies": {
  468 + "function-bind": "^1.1.1",
  469 + "get-intrinsic": "^1.0.2"
  470 + },
  471 + "funding": {
  472 + "url": "https://github.com/sponsors/ljharb"
  473 + }
  474 + },
439 475 "node_modules/callsites": {
440 476 "version": "3.1.0",
441 477 "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
... ... @@ -543,6 +579,12 @@
543 579 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
544 580 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
545 581 },
  582 + "node_modules/confusing-browser-globals": {
  583 + "version": "1.0.11",
  584 + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
  585 + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
  586 + "dev": true
  587 + },
546 588 "node_modules/content-disposition": {
547 589 "version": "0.5.3",
548 590 "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
... ... @@ -642,6 +684,18 @@
642 684 "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
643 685 "dev": true
644 686 },
  687 + "node_modules/define-properties": {
  688 + "version": "1.1.3",
  689 + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
  690 + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
  691 + "dev": true,
  692 + "dependencies": {
  693 + "object-keys": "^1.0.12"
  694 + },
  695 + "engines": {
  696 + "node": ">= 0.4"
  697 + }
  698 + },
645 699 "node_modules/delayed-stream": {
646 700 "version": "1.0.0",
647 701 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
... ... @@ -739,6 +793,57 @@
739 793 "node": ">=8.6"
740 794 }
741 795 },
  796 + "node_modules/es-abstract": {
  797 + "version": "1.19.1",
  798 + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
  799 + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
  800 + "dev": true,
  801 + "dependencies": {
  802 + "call-bind": "^1.0.2",
  803 + "es-to-primitive": "^1.2.1",
  804 + "function-bind": "^1.1.1",
  805 + "get-intrinsic": "^1.1.1",
  806 + "get-symbol-description": "^1.0.0",
  807 + "has": "^1.0.3",
  808 + "has-symbols": "^1.0.2",
  809 + "internal-slot": "^1.0.3",
  810 + "is-callable": "^1.2.4",
  811 + "is-negative-zero": "^2.0.1",
  812 + "is-regex": "^1.1.4",
  813 + "is-shared-array-buffer": "^1.0.1",
  814 + "is-string": "^1.0.7",
  815 + "is-weakref": "^1.0.1",
  816 + "object-inspect": "^1.11.0",
  817 + "object-keys": "^1.1.1",
  818 + "object.assign": "^4.1.2",
  819 + "string.prototype.trimend": "^1.0.4",
  820 + "string.prototype.trimstart": "^1.0.4",
  821 + "unbox-primitive": "^1.0.1"
  822 + },
  823 + "engines": {
  824 + "node": ">= 0.4"
  825 + },
  826 + "funding": {
  827 + "url": "https://github.com/sponsors/ljharb"
  828 + }
  829 + },
  830 + "node_modules/es-to-primitive": {
  831 + "version": "1.2.1",
  832 + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
  833 + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
  834 + "dev": true,
  835 + "dependencies": {
  836 + "is-callable": "^1.1.4",
  837 + "is-date-object": "^1.0.1",
  838 + "is-symbol": "^1.0.2"
  839 + },
  840 + "engines": {
  841 + "node": ">= 0.4"
  842 + },
  843 + "funding": {
  844 + "url": "https://github.com/sponsors/ljharb"
  845 + }
  846 + },
742 847 "node_modules/es6-promisify": {
743 848 "version": "6.0.0",
744 849 "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.0.tgz",
... ... @@ -762,13 +867,13 @@
762 867 }
763 868 },
764 869 "node_modules/eslint": {
765   - "version": "8.0.0",
766   - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.0.0.tgz",
767   - "integrity": "sha512-03spzPzMAO4pElm44m60Nj08nYonPGQXmw6Ceai/S4QK82IgwWO1EXx1s9namKzVlbVu3Jf81hb+N+8+v21/HQ==",
  870 + "version": "8.6.0",
  871 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz",
  872 + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==",
768 873 "dev": true,
769 874 "dependencies": {
770   - "@eslint/eslintrc": "^1.0.2",
771   - "@humanwhocodes/config-array": "^0.6.0",
  875 + "@eslint/eslintrc": "^1.0.5",
  876 + "@humanwhocodes/config-array": "^0.9.2",
772 877 "ajv": "^6.10.0",
773 878 "chalk": "^4.0.0",
774 879 "cross-spawn": "^7.0.2",
... ... @@ -776,10 +881,10 @@
776 881 "doctrine": "^3.0.0",
777 882 "enquirer": "^2.3.5",
778 883 "escape-string-regexp": "^4.0.0",
779   - "eslint-scope": "^6.0.0",
  884 + "eslint-scope": "^7.1.0",
780 885 "eslint-utils": "^3.0.0",
781   - "eslint-visitor-keys": "^3.0.0",
782   - "espree": "^9.0.0",
  886 + "eslint-visitor-keys": "^3.1.0",
  887 + "espree": "^9.3.0",
783 888 "esquery": "^1.4.0",
784 889 "esutils": "^2.0.2",
785 890 "fast-deep-equal": "^3.1.3",
... ... @@ -801,7 +906,7 @@
801 906 "progress": "^2.0.0",
802 907 "regexpp": "^3.2.0",
803 908 "semver": "^7.2.1",
804   - "strip-ansi": "^6.0.0",
  909 + "strip-ansi": "^6.0.1",
805 910 "strip-json-comments": "^3.1.0",
806 911 "text-table": "^0.2.0",
807 912 "v8-compile-cache": "^2.0.3"
... ... @@ -816,10 +921,121 @@
816 921 "url": "https://opencollective.com/eslint"
817 922 }
818 923 },
  924 + "node_modules/eslint-config-airbnb-base": {
  925 + "version": "15.0.0",
  926 + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
  927 + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
  928 + "dev": true,
  929 + "dependencies": {
  930 + "confusing-browser-globals": "^1.0.10",
  931 + "object.assign": "^4.1.2",
  932 + "object.entries": "^1.1.5",
  933 + "semver": "^6.3.0"
  934 + },
  935 + "engines": {
  936 + "node": "^10.12.0 || >=12.0.0"
  937 + },
  938 + "peerDependencies": {
  939 + "eslint": "^7.32.0 || ^8.2.0",
  940 + "eslint-plugin-import": "^2.25.2"
  941 + }
  942 + },
  943 + "node_modules/eslint-import-resolver-node": {
  944 + "version": "0.3.6",
  945 + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
  946 + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
  947 + "dev": true,
  948 + "dependencies": {
  949 + "debug": "^3.2.7",
  950 + "resolve": "^1.20.0"
  951 + }
  952 + },
  953 + "node_modules/eslint-import-resolver-node/node_modules/debug": {
  954 + "version": "3.2.7",
  955 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
  956 + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
  957 + "dev": true,
  958 + "dependencies": {
  959 + "ms": "^2.1.1"
  960 + }
  961 + },
  962 + "node_modules/eslint-import-resolver-node/node_modules/ms": {
  963 + "version": "2.1.3",
  964 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
  965 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
  966 + "dev": true
  967 + },
  968 + "node_modules/eslint-module-utils": {
  969 + "version": "2.7.2",
  970 + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz",
  971 + "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==",
  972 + "dev": true,
  973 + "dependencies": {
  974 + "debug": "^3.2.7",
  975 + "find-up": "^2.1.0"
  976 + },
  977 + "engines": {
  978 + "node": ">=4"
  979 + }
  980 + },
  981 + "node_modules/eslint-module-utils/node_modules/debug": {
  982 + "version": "3.2.7",
  983 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
  984 + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
  985 + "dev": true,
  986 + "dependencies": {
  987 + "ms": "^2.1.1"
  988 + }
  989 + },
  990 + "node_modules/eslint-module-utils/node_modules/ms": {
  991 + "version": "2.1.3",
  992 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
  993 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
  994 + "dev": true
  995 + },
  996 + "node_modules/eslint-plugin-import": {
  997 + "version": "2.25.4",
  998 + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz",
  999 + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==",
  1000 + "dev": true,
  1001 + "dependencies": {
  1002 + "array-includes": "^3.1.4",
  1003 + "array.prototype.flat": "^1.2.5",
  1004 + "debug": "^2.6.9",
  1005 + "doctrine": "^2.1.0",
  1006 + "eslint-import-resolver-node": "^0.3.6",
  1007 + "eslint-module-utils": "^2.7.2",
  1008 + "has": "^1.0.3",
  1009 + "is-core-module": "^2.8.0",
  1010 + "is-glob": "^4.0.3",
  1011 + "minimatch": "^3.0.4",
  1012 + "object.values": "^1.1.5",
  1013 + "resolve": "^1.20.0",
  1014 + "tsconfig-paths": "^3.12.0"
  1015 + },
  1016 + "engines": {
  1017 + "node": ">=4"
  1018 + },
  1019 + "peerDependencies": {
  1020 + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
  1021 + }
  1022 + },
  1023 + "node_modules/eslint-plugin-import/node_modules/doctrine": {
  1024 + "version": "2.1.0",
  1025 + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
  1026 + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
  1027 + "dev": true,
  1028 + "dependencies": {
  1029 + "esutils": "^2.0.2"
  1030 + },
  1031 + "engines": {
  1032 + "node": ">=0.10.0"
  1033 + }
  1034 + },
819 1035 "node_modules/eslint-scope": {
820   - "version": "6.0.0",
821   - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz",
822   - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==",
  1036 + "version": "7.1.0",
  1037 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz",
  1038 + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==",
823 1039 "dev": true,
824 1040 "dependencies": {
825 1041 "esrecurse": "^4.3.0",
... ... @@ -857,9 +1073,9 @@
857 1073 }
858 1074 },
859 1075 "node_modules/eslint-visitor-keys": {
860   - "version": "3.0.0",
861   - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz",
862   - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==",
  1076 + "version": "3.1.0",
  1077 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz",
  1078 + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==",
863 1079 "dev": true,
864 1080 "engines": {
865 1081 "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
... ... @@ -922,32 +1138,19 @@
922 1138 "dev": true
923 1139 },
924 1140 "node_modules/espree": {
925   - "version": "9.0.0",
926   - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz",
927   - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==",
  1141 + "version": "9.3.0",
  1142 + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz",
  1143 + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==",
928 1144 "dev": true,
929 1145 "dependencies": {
930   - "acorn": "^8.5.0",
  1146 + "acorn": "^8.7.0",
931 1147 "acorn-jsx": "^5.3.1",
932   - "eslint-visitor-keys": "^3.0.0"
  1148 + "eslint-visitor-keys": "^3.1.0"
933 1149 },
934 1150 "engines": {
935 1151 "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
936 1152 }
937 1153 },
938   - "node_modules/esprima": {
939   - "version": "4.0.1",
940   - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
941   - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
942   - "dev": true,
943   - "bin": {
944   - "esparse": "bin/esparse.js",
945   - "esvalidate": "bin/esvalidate.js"
946   - },
947   - "engines": {
948   - "node": ">=4"
949   - }
950   - },
951 1154 "node_modules/esquery": {
952 1155 "version": "1.4.0",
953 1156 "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
... ... @@ -1274,6 +1477,18 @@
1274 1477 "node": ">= 0.6"
1275 1478 }
1276 1479 },
  1480 + "node_modules/find-up": {
  1481 + "version": "2.1.0",
  1482 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
  1483 + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
  1484 + "dev": true,
  1485 + "dependencies": {
  1486 + "locate-path": "^2.0.0"
  1487 + },
  1488 + "engines": {
  1489 + "node": ">=4"
  1490 + }
  1491 + },
1277 1492 "node_modules/flat-cache": {
1278 1493 "version": "3.0.4",
1279 1494 "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
... ... @@ -1351,12 +1566,48 @@
1351 1566 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1352 1567 "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
1353 1568 },
  1569 + "node_modules/function-bind": {
  1570 + "version": "1.1.1",
  1571 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
  1572 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
  1573 + "dev": true
  1574 + },
1354 1575 "node_modules/functional-red-black-tree": {
1355 1576 "version": "1.0.1",
1356 1577 "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
1357 1578 "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
1358 1579 "dev": true
1359 1580 },
  1581 + "node_modules/get-intrinsic": {
  1582 + "version": "1.1.1",
  1583 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
  1584 + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
  1585 + "dev": true,
  1586 + "dependencies": {
  1587 + "function-bind": "^1.1.1",
  1588 + "has": "^1.0.3",
  1589 + "has-symbols": "^1.0.1"
  1590 + },
  1591 + "funding": {
  1592 + "url": "https://github.com/sponsors/ljharb"
  1593 + }
  1594 + },
  1595 + "node_modules/get-symbol-description": {
  1596 + "version": "1.0.0",
  1597 + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
  1598 + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
  1599 + "dev": true,
  1600 + "dependencies": {
  1601 + "call-bind": "^1.0.2",
  1602 + "get-intrinsic": "^1.1.1"
  1603 + },
  1604 + "engines": {
  1605 + "node": ">= 0.4"
  1606 + },
  1607 + "funding": {
  1608 + "url": "https://github.com/sponsors/ljharb"
  1609 + }
  1610 + },
1360 1611 "node_modules/getpass": {
1361 1612 "version": "0.1.7",
1362 1613 "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
... ... @@ -1397,9 +1648,9 @@
1397 1648 }
1398 1649 },
1399 1650 "node_modules/globals": {
1400   - "version": "13.11.0",
1401   - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
1402   - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
  1651 + "version": "13.12.0",
  1652 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
  1653 + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
1403 1654 "dev": true,
1404 1655 "dependencies": {
1405 1656 "type-fest": "^0.20.2"
... ... @@ -1452,6 +1703,27 @@
1452 1703 "node": ">=6"
1453 1704 }
1454 1705 },
  1706 + "node_modules/has": {
  1707 + "version": "1.0.3",
  1708 + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
  1709 + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
  1710 + "dev": true,
  1711 + "dependencies": {
  1712 + "function-bind": "^1.1.1"
  1713 + },
  1714 + "engines": {
  1715 + "node": ">= 0.4.0"
  1716 + }
  1717 + },
  1718 + "node_modules/has-bigints": {
  1719 + "version": "1.0.1",
  1720 + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
  1721 + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
  1722 + "dev": true,
  1723 + "funding": {
  1724 + "url": "https://github.com/sponsors/ljharb"
  1725 + }
  1726 + },
1455 1727 "node_modules/has-flag": {
1456 1728 "version": "4.0.0",
1457 1729 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
... ... @@ -1461,6 +1733,33 @@
1461 1733 "node": ">=8"
1462 1734 }
1463 1735 },
  1736 + "node_modules/has-symbols": {
  1737 + "version": "1.0.2",
  1738 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
  1739 + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
  1740 + "dev": true,
  1741 + "engines": {
  1742 + "node": ">= 0.4"
  1743 + },
  1744 + "funding": {
  1745 + "url": "https://github.com/sponsors/ljharb"
  1746 + }
  1747 + },
  1748 + "node_modules/has-tostringtag": {
  1749 + "version": "1.0.0",
  1750 + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
  1751 + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
  1752 + "dev": true,
  1753 + "dependencies": {
  1754 + "has-symbols": "^1.0.2"
  1755 + },
  1756 + "engines": {
  1757 + "node": ">= 0.4"
  1758 + },
  1759 + "funding": {
  1760 + "url": "https://github.com/sponsors/ljharb"
  1761 + }
  1762 + },
1464 1763 "node_modules/http-errors": {
1465 1764 "version": "1.6.2",
1466 1765 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
... ... @@ -1550,6 +1849,20 @@
1550 1849 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1551 1850 "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
1552 1851 },
  1852 + "node_modules/internal-slot": {
  1853 + "version": "1.0.3",
  1854 + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
  1855 + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
  1856 + "dev": true,
  1857 + "dependencies": {
  1858 + "get-intrinsic": "^1.1.0",
  1859 + "has": "^1.0.3",
  1860 + "side-channel": "^1.0.4"
  1861 + },
  1862 + "engines": {
  1863 + "node": ">= 0.4"
  1864 + }
  1865 + },
1553 1866 "node_modules/ipaddr.js": {
1554 1867 "version": "1.9.1",
1555 1868 "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
... ... @@ -1563,6 +1876,73 @@
1563 1876 "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
1564 1877 "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
1565 1878 },
  1879 + "node_modules/is-bigint": {
  1880 + "version": "1.0.4",
  1881 + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
  1882 + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
  1883 + "dev": true,
  1884 + "dependencies": {
  1885 + "has-bigints": "^1.0.1"
  1886 + },
  1887 + "funding": {
  1888 + "url": "https://github.com/sponsors/ljharb"
  1889 + }
  1890 + },
  1891 + "node_modules/is-boolean-object": {
  1892 + "version": "1.1.2",
  1893 + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
  1894 + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
  1895 + "dev": true,
  1896 + "dependencies": {
  1897 + "call-bind": "^1.0.2",
  1898 + "has-tostringtag": "^1.0.0"
  1899 + },
  1900 + "engines": {
  1901 + "node": ">= 0.4"
  1902 + },
  1903 + "funding": {
  1904 + "url": "https://github.com/sponsors/ljharb"
  1905 + }
  1906 + },
  1907 + "node_modules/is-callable": {
  1908 + "version": "1.2.4",
  1909 + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
  1910 + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
  1911 + "dev": true,
  1912 + "engines": {
  1913 + "node": ">= 0.4"
  1914 + },
  1915 + "funding": {
  1916 + "url": "https://github.com/sponsors/ljharb"
  1917 + }
  1918 + },
  1919 + "node_modules/is-core-module": {
  1920 + "version": "2.8.1",
  1921 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
  1922 + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
  1923 + "dev": true,
  1924 + "dependencies": {
  1925 + "has": "^1.0.3"
  1926 + },
  1927 + "funding": {
  1928 + "url": "https://github.com/sponsors/ljharb"
  1929 + }
  1930 + },
  1931 + "node_modules/is-date-object": {
  1932 + "version": "1.0.5",
  1933 + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
  1934 + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
  1935 + "dev": true,
  1936 + "dependencies": {
  1937 + "has-tostringtag": "^1.0.0"
  1938 + },
  1939 + "engines": {
  1940 + "node": ">= 0.4"
  1941 + },
  1942 + "funding": {
  1943 + "url": "https://github.com/sponsors/ljharb"
  1944 + }
  1945 + },
1566 1946 "node_modules/is-extglob": {
1567 1947 "version": "2.1.1",
1568 1948 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
... ... @@ -1584,6 +1964,58 @@
1584 1964 "node": ">=0.10.0"
1585 1965 }
1586 1966 },
  1967 + "node_modules/is-negative-zero": {
  1968 + "version": "2.0.2",
  1969 + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
  1970 + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
  1971 + "dev": true,
  1972 + "engines": {
  1973 + "node": ">= 0.4"
  1974 + },
  1975 + "funding": {
  1976 + "url": "https://github.com/sponsors/ljharb"
  1977 + }
  1978 + },
  1979 + "node_modules/is-number-object": {
  1980 + "version": "1.0.6",
  1981 + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
  1982 + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
  1983 + "dev": true,
  1984 + "dependencies": {
  1985 + "has-tostringtag": "^1.0.0"
  1986 + },
  1987 + "engines": {
  1988 + "node": ">= 0.4"
  1989 + },
  1990 + "funding": {
  1991 + "url": "https://github.com/sponsors/ljharb"
  1992 + }
  1993 + },
  1994 + "node_modules/is-regex": {
  1995 + "version": "1.1.4",
  1996 + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
  1997 + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
  1998 + "dev": true,
  1999 + "dependencies": {
  2000 + "call-bind": "^1.0.2",
  2001 + "has-tostringtag": "^1.0.0"
  2002 + },
  2003 + "engines": {
  2004 + "node": ">= 0.4"
  2005 + },
  2006 + "funding": {
  2007 + "url": "https://github.com/sponsors/ljharb"
  2008 + }
  2009 + },
  2010 + "node_modules/is-shared-array-buffer": {
  2011 + "version": "1.0.1",
  2012 + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
  2013 + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
  2014 + "dev": true,
  2015 + "funding": {
  2016 + "url": "https://github.com/sponsors/ljharb"
  2017 + }
  2018 + },
1587 2019 "node_modules/is-stream": {
1588 2020 "version": "2.0.1",
1589 2021 "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
... ... @@ -1595,11 +2027,53 @@
1595 2027 "url": "https://github.com/sponsors/sindresorhus"
1596 2028 }
1597 2029 },
  2030 + "node_modules/is-string": {
  2031 + "version": "1.0.7",
  2032 + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
  2033 + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
  2034 + "dev": true,
  2035 + "dependencies": {
  2036 + "has-tostringtag": "^1.0.0"
  2037 + },
  2038 + "engines": {
  2039 + "node": ">= 0.4"
  2040 + },
  2041 + "funding": {
  2042 + "url": "https://github.com/sponsors/ljharb"
  2043 + }
  2044 + },
  2045 + "node_modules/is-symbol": {
  2046 + "version": "1.0.4",
  2047 + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
  2048 + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
  2049 + "dev": true,
  2050 + "dependencies": {
  2051 + "has-symbols": "^1.0.2"
  2052 + },
  2053 + "engines": {
  2054 + "node": ">= 0.4"
  2055 + },
  2056 + "funding": {
  2057 + "url": "https://github.com/sponsors/ljharb"
  2058 + }
  2059 + },
1598 2060 "node_modules/is-typedarray": {
1599 2061 "version": "1.0.0",
1600 2062 "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1601 2063 "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
1602 2064 },
  2065 + "node_modules/is-weakref": {
  2066 + "version": "1.0.2",
  2067 + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
  2068 + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
  2069 + "dev": true,
  2070 + "dependencies": {
  2071 + "call-bind": "^1.0.2"
  2072 + },
  2073 + "funding": {
  2074 + "url": "https://github.com/sponsors/ljharb"
  2075 + }
  2076 + },
1603 2077 "node_modules/isarray": {
1604 2078 "version": "1.0.0",
1605 2079 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
... ... @@ -1667,6 +2141,18 @@
1667 2141 "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1668 2142 "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
1669 2143 },
  2144 + "node_modules/json5": {
  2145 + "version": "1.0.1",
  2146 + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
  2147 + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
  2148 + "dev": true,
  2149 + "dependencies": {
  2150 + "minimist": "^1.2.0"
  2151 + },
  2152 + "bin": {
  2153 + "json5": "lib/cli.js"
  2154 + }
  2155 + },
1670 2156 "node_modules/jsprim": {
1671 2157 "version": "1.4.1",
1672 2158 "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
... ... @@ -1699,6 +2185,19 @@
1699 2185 "node": ">= 0.8.0"
1700 2186 }
1701 2187 },
  2188 + "node_modules/locate-path": {
  2189 + "version": "2.0.0",
  2190 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
  2191 + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
  2192 + "dev": true,
  2193 + "dependencies": {
  2194 + "p-locate": "^2.0.0",
  2195 + "path-exists": "^3.0.0"
  2196 + },
  2197 + "engines": {
  2198 + "node": ">=4"
  2199 + }
  2200 + },
1702 2201 "node_modules/lodash": {
1703 2202 "version": "4.17.21",
1704 2203 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
... ... @@ -1915,6 +2414,73 @@
1915 2414 "node": ">= 6"
1916 2415 }
1917 2416 },
  2417 + "node_modules/object-inspect": {
  2418 + "version": "1.12.0",
  2419 + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
  2420 + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
  2421 + "dev": true,
  2422 + "funding": {
  2423 + "url": "https://github.com/sponsors/ljharb"
  2424 + }
  2425 + },
  2426 + "node_modules/object-keys": {
  2427 + "version": "1.1.1",
  2428 + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
  2429 + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
  2430 + "dev": true,
  2431 + "engines": {
  2432 + "node": ">= 0.4"
  2433 + }
  2434 + },
  2435 + "node_modules/object.assign": {
  2436 + "version": "4.1.2",
  2437 + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
  2438 + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
  2439 + "dev": true,
  2440 + "dependencies": {
  2441 + "call-bind": "^1.0.0",
  2442 + "define-properties": "^1.1.3",
  2443 + "has-symbols": "^1.0.1",
  2444 + "object-keys": "^1.1.1"
  2445 + },
  2446 + "engines": {
  2447 + "node": ">= 0.4"
  2448 + },
  2449 + "funding": {
  2450 + "url": "https://github.com/sponsors/ljharb"
  2451 + }
  2452 + },
  2453 + "node_modules/object.entries": {
  2454 + "version": "1.1.5",
  2455 + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
  2456 + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
  2457 + "dev": true,
  2458 + "dependencies": {
  2459 + "call-bind": "^1.0.2",
  2460 + "define-properties": "^1.1.3",
  2461 + "es-abstract": "^1.19.1"
  2462 + },
  2463 + "engines": {
  2464 + "node": ">= 0.4"
  2465 + }
  2466 + },
  2467 + "node_modules/object.values": {
  2468 + "version": "1.1.5",
  2469 + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
  2470 + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
  2471 + "dev": true,
  2472 + "dependencies": {
  2473 + "call-bind": "^1.0.2",
  2474 + "define-properties": "^1.1.3",
  2475 + "es-abstract": "^1.19.1"
  2476 + },
  2477 + "engines": {
  2478 + "node": ">= 0.4"
  2479 + },
  2480 + "funding": {
  2481 + "url": "https://github.com/sponsors/ljharb"
  2482 + }
  2483 + },
1918 2484 "node_modules/on-finished": {
1919 2485 "version": "2.3.0",
1920 2486 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
... ... @@ -1967,6 +2533,39 @@
1967 2533 "node": ">= 0.8.0"
1968 2534 }
1969 2535 },
  2536 + "node_modules/p-limit": {
  2537 + "version": "1.3.0",
  2538 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
  2539 + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
  2540 + "dev": true,
  2541 + "dependencies": {
  2542 + "p-try": "^1.0.0"
  2543 + },
  2544 + "engines": {
  2545 + "node": ">=4"
  2546 + }
  2547 + },
  2548 + "node_modules/p-locate": {
  2549 + "version": "2.0.0",
  2550 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
  2551 + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
  2552 + "dev": true,
  2553 + "dependencies": {
  2554 + "p-limit": "^1.1.0"
  2555 + },
  2556 + "engines": {
  2557 + "node": ">=4"
  2558 + }
  2559 + },
  2560 + "node_modules/p-try": {
  2561 + "version": "1.0.0",
  2562 + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
  2563 + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
  2564 + "dev": true,
  2565 + "engines": {
  2566 + "node": ">=4"
  2567 + }
  2568 + },
1970 2569 "node_modules/parent-module": {
1971 2570 "version": "1.0.1",
1972 2571 "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
... ... @@ -1998,6 +2597,15 @@
1998 2597 "node": ">= 0.8"
1999 2598 }
2000 2599 },
  2600 + "node_modules/path-exists": {
  2601 + "version": "3.0.0",
  2602 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
  2603 + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
  2604 + "dev": true,
  2605 + "engines": {
  2606 + "node": ">=4"
  2607 + }
  2608 + },
2001 2609 "node_modules/path-is-absolute": {
2002 2610 "version": "1.0.1",
2003 2611 "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
... ... @@ -2015,6 +2623,12 @@
2015 2623 "node": ">=8"
2016 2624 }
2017 2625 },
  2626 + "node_modules/path-parse": {
  2627 + "version": "1.0.7",
  2628 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
  2629 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
  2630 + "dev": true
  2631 + },
2018 2632 "node_modules/path-to-regexp": {
2019 2633 "version": "0.1.7",
2020 2634 "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
... ... @@ -2232,6 +2846,23 @@
2232 2846 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
2233 2847 "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
2234 2848 },
  2849 + "node_modules/resolve": {
  2850 + "version": "1.21.0",
  2851 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz",
  2852 + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==",
  2853 + "dev": true,
  2854 + "dependencies": {
  2855 + "is-core-module": "^2.8.0",
  2856 + "path-parse": "^1.0.7",
  2857 + "supports-preserve-symlinks-flag": "^1.0.0"
  2858 + },
  2859 + "bin": {
  2860 + "resolve": "bin/resolve"
  2861 + },
  2862 + "funding": {
  2863 + "url": "https://github.com/sponsors/ljharb"
  2864 + }
  2865 + },
2235 2866 "node_modules/resolve-from": {
2236 2867 "version": "4.0.0",
2237 2868 "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
... ... @@ -2398,6 +3029,20 @@
2398 3029 "node": ">=8"
2399 3030 }
2400 3031 },
  3032 + "node_modules/side-channel": {
  3033 + "version": "1.0.4",
  3034 + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
  3035 + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
  3036 + "dev": true,
  3037 + "dependencies": {
  3038 + "call-bind": "^1.0.0",
  3039 + "get-intrinsic": "^1.0.2",
  3040 + "object-inspect": "^1.9.0"
  3041 + },
  3042 + "funding": {
  3043 + "url": "https://github.com/sponsors/ljharb"
  3044 + }
  3045 + },
2401 3046 "node_modules/simple-git": {
2402 3047 "version": "1.80.1",
2403 3048 "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.80.1.tgz",
... ... @@ -2422,12 +3067,6 @@
2422 3067 "node": ">=0.10.0"
2423 3068 }
2424 3069 },
2425   - "node_modules/sprintf-js": {
2426   - "version": "1.0.3",
2427   - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2428   - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2429   - "dev": true
2430   - },
2431 3070 "node_modules/sshpk": {
2432 3071 "version": "1.16.1",
2433 3072 "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
... ... @@ -2508,6 +3147,32 @@
2508 3147 "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-2.0.2.tgz",
2509 3148 "integrity": "sha1-xc5OJ4q10SZa5vxVQ1rre3b8sAE="
2510 3149 },
  3150 + "node_modules/string.prototype.trimend": {
  3151 + "version": "1.0.4",
  3152 + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
  3153 + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
  3154 + "dev": true,
  3155 + "dependencies": {
  3156 + "call-bind": "^1.0.2",
  3157 + "define-properties": "^1.1.3"
  3158 + },
  3159 + "funding": {
  3160 + "url": "https://github.com/sponsors/ljharb"
  3161 + }
  3162 + },
  3163 + "node_modules/string.prototype.trimstart": {
  3164 + "version": "1.0.4",
  3165 + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
  3166 + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
  3167 + "dev": true,
  3168 + "dependencies": {
  3169 + "call-bind": "^1.0.2",
  3170 + "define-properties": "^1.1.3"
  3171 + },
  3172 + "funding": {
  3173 + "url": "https://github.com/sponsors/ljharb"
  3174 + }
  3175 + },
2511 3176 "node_modules/strip-ansi": {
2512 3177 "version": "6.0.1",
2513 3178 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
... ... @@ -2520,6 +3185,15 @@
2520 3185 "node": ">=8"
2521 3186 }
2522 3187 },
  3188 + "node_modules/strip-bom": {
  3189 + "version": "3.0.0",
  3190 + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
  3191 + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
  3192 + "dev": true,
  3193 + "engines": {
  3194 + "node": ">=4"
  3195 + }
  3196 + },
2523 3197 "node_modules/strip-json-comments": {
2524 3198 "version": "3.1.1",
2525 3199 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
... ... @@ -2544,6 +3218,18 @@
2544 3218 "node": ">=8"
2545 3219 }
2546 3220 },
  3221 + "node_modules/supports-preserve-symlinks-flag": {
  3222 + "version": "1.0.0",
  3223 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
  3224 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
  3225 + "dev": true,
  3226 + "engines": {
  3227 + "node": ">= 0.4"
  3228 + },
  3229 + "funding": {
  3230 + "url": "https://github.com/sponsors/ljharb"
  3231 + }
  3232 + },
2547 3233 "node_modules/tektrans-logger": {
2548 3234 "version": "1.2.3",
2549 3235 "resolved": "https://registry.npmjs.org/tektrans-logger/-/tektrans-logger-1.2.3.tgz",
... ... @@ -2624,6 +3310,18 @@
2624 3310 "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
2625 3311 "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
2626 3312 },
  3313 + "node_modules/tsconfig-paths": {
  3314 + "version": "3.12.0",
  3315 + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz",
  3316 + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==",
  3317 + "dev": true,
  3318 + "dependencies": {
  3319 + "@types/json5": "^0.0.29",
  3320 + "json5": "^1.0.1",
  3321 + "minimist": "^1.2.0",
  3322 + "strip-bom": "^3.0.0"
  3323 + }
  3324 + },
2627 3325 "node_modules/tunnel-agent": {
2628 3326 "version": "0.6.0",
2629 3327 "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
... ... @@ -2718,6 +3416,21 @@
2718 3416 "node": ">= 0.8"
2719 3417 }
2720 3418 },
  3419 + "node_modules/unbox-primitive": {
  3420 + "version": "1.0.1",
  3421 + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
  3422 + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
  3423 + "dev": true,
  3424 + "dependencies": {
  3425 + "function-bind": "^1.1.1",
  3426 + "has-bigints": "^1.0.1",
  3427 + "has-symbols": "^1.0.2",
  3428 + "which-boxed-primitive": "^1.0.2"
  3429 + },
  3430 + "funding": {
  3431 + "url": "https://github.com/sponsors/ljharb"
  3432 + }
  3433 + },
2721 3434 "node_modules/uniqid": {
2722 3435 "version": "4.1.1",
2723 3436 "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz",
... ... @@ -2750,6 +3463,11 @@
2750 3463 "node": ">=6"
2751 3464 }
2752 3465 },
  3466 + "node_modules/url-join": {
  3467 + "version": "4.0.1",
  3468 + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
  3469 + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="
  3470 + },
2753 3471 "node_modules/util-deprecate": {
2754 3472 "version": "1.0.2",
2755 3473 "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
... ... @@ -2814,6 +3532,22 @@
2814 3532 "node": ">= 8"
2815 3533 }
2816 3534 },
  3535 + "node_modules/which-boxed-primitive": {
  3536 + "version": "1.0.2",
  3537 + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
  3538 + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
  3539 + "dev": true,
  3540 + "dependencies": {
  3541 + "is-bigint": "^1.0.1",
  3542 + "is-boolean-object": "^1.1.0",
  3543 + "is-number-object": "^1.0.4",
  3544 + "is-string": "^1.0.5",
  3545 + "is-symbol": "^1.0.3"
  3546 + },
  3547 + "funding": {
  3548 + "url": "https://github.com/sponsors/ljharb"
  3549 + }
  3550 + },
2817 3551 "node_modules/winston": {
2818 3552 "version": "3.3.3",
2819 3553 "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz",
... ... @@ -2971,50 +3705,31 @@
2971 3705 }
2972 3706 },
2973 3707 "@eslint/eslintrc": {
2974   - "version": "1.0.2",
2975   - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.2.tgz",
2976   - "integrity": "sha512-x1ZXdEFsvTcnbTZgqcWUL9w2ybgZCw/qbKTPQnab+XnYA2bMQpJCh+/bBzCRfDJaJdlrrQlOk49jNtru9gL/6Q==",
  3708 + "version": "1.0.5",
  3709 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz",
  3710 + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==",
2977 3711 "dev": true,
2978 3712 "requires": {
2979 3713 "ajv": "^6.12.4",
2980 3714 "debug": "^4.3.2",
2981   - "espree": "^9.0.0",
  3715 + "espree": "^9.2.0",
2982 3716 "globals": "^13.9.0",
2983 3717 "ignore": "^4.0.6",
2984 3718 "import-fresh": "^3.2.1",
2985   - "js-yaml": "^3.13.1",
  3719 + "js-yaml": "^4.1.0",
2986 3720 "minimatch": "^3.0.4",
2987 3721 "strip-json-comments": "^3.1.1"
2988 3722 },
2989 3723 "dependencies": {
2990   - "argparse": {
2991   - "version": "1.0.10",
2992   - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
2993   - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
2994   - "dev": true,
2995   - "requires": {
2996   - "sprintf-js": "~1.0.2"
2997   - }
2998   - },
2999 3724 "debug": {
3000   - "version": "4.3.2",
3001   - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
3002   - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
  3725 + "version": "4.3.3",
  3726 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
  3727 + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
3003 3728 "dev": true,
3004 3729 "requires": {
3005 3730 "ms": "2.1.2"
3006 3731 }
3007 3732 },
3008   - "js-yaml": {
3009   - "version": "3.14.1",
3010   - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
3011   - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
3012   - "dev": true,
3013   - "requires": {
3014   - "argparse": "^1.0.7",
3015   - "esprima": "^4.0.0"
3016   - }
3017   - },
3018 3733 "ms": {
3019 3734 "version": "2.1.2",
3020 3735 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
... ... @@ -3024,20 +3739,20 @@
3024 3739 }
3025 3740 },
3026 3741 "@humanwhocodes/config-array": {
3027   - "version": "0.6.0",
3028   - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz",
3029   - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==",
  3742 + "version": "0.9.2",
  3743 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz",
  3744 + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==",
3030 3745 "dev": true,
3031 3746 "requires": {
3032   - "@humanwhocodes/object-schema": "^1.2.0",
  3747 + "@humanwhocodes/object-schema": "^1.2.1",
3033 3748 "debug": "^4.1.1",
3034 3749 "minimatch": "^3.0.4"
3035 3750 },
3036 3751 "dependencies": {
3037 3752 "debug": {
3038   - "version": "4.3.2",
3039   - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
3040   - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
  3753 + "version": "4.3.3",
  3754 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
  3755 + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
3041 3756 "dev": true,
3042 3757 "requires": {
3043 3758 "ms": "2.1.2"
... ... @@ -3052,9 +3767,15 @@
3052 3767 }
3053 3768 },
3054 3769 "@humanwhocodes/object-schema": {
3055   - "version": "1.2.0",
3056   - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
3057   - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
  3770 + "version": "1.2.1",
  3771 + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
  3772 + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
  3773 + "dev": true
  3774 + },
  3775 + "@types/json5": {
  3776 + "version": "0.0.29",
  3777 + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
  3778 + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
3058 3779 "dev": true
3059 3780 },
3060 3781 "a-sync-waterfall": {
... ... @@ -3072,9 +3793,9 @@
3072 3793 }
3073 3794 },
3074 3795 "acorn": {
3075   - "version": "8.5.0",
3076   - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
3077   - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
  3796 + "version": "8.7.0",
  3797 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
  3798 + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
3078 3799 "dev": true
3079 3800 },
3080 3801 "acorn-jsx": {
... ... @@ -3144,11 +3865,35 @@
3144 3865 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
3145 3866 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
3146 3867 },
  3868 + "array-includes": {
  3869 + "version": "3.1.4",
  3870 + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
  3871 + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
  3872 + "dev": true,
  3873 + "requires": {
  3874 + "call-bind": "^1.0.2",
  3875 + "define-properties": "^1.1.3",
  3876 + "es-abstract": "^1.19.1",
  3877 + "get-intrinsic": "^1.1.1",
  3878 + "is-string": "^1.0.7"
  3879 + }
  3880 + },
3147 3881 "array-unique": {
3148 3882 "version": "0.3.2",
3149 3883 "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
3150 3884 "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
3151 3885 },
  3886 + "array.prototype.flat": {
  3887 + "version": "1.2.5",
  3888 + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
  3889 + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
  3890 + "dev": true,
  3891 + "requires": {
  3892 + "call-bind": "^1.0.2",
  3893 + "define-properties": "^1.1.3",
  3894 + "es-abstract": "^1.19.0"
  3895 + }
  3896 + },
3152 3897 "asap": {
3153 3898 "version": "2.0.6",
3154 3899 "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
... ... @@ -3265,6 +4010,16 @@
3265 4010 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
3266 4011 "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
3267 4012 },
  4013 + "call-bind": {
  4014 + "version": "1.0.2",
  4015 + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
  4016 + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
  4017 + "dev": true,
  4018 + "requires": {
  4019 + "function-bind": "^1.1.1",
  4020 + "get-intrinsic": "^1.0.2"
  4021 + }
  4022 + },
3268 4023 "callsites": {
3269 4024 "version": "3.1.0",
3270 4025 "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
... ... @@ -3354,6 +4109,12 @@
3354 4109 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
3355 4110 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
3356 4111 },
  4112 + "confusing-browser-globals": {
  4113 + "version": "1.0.11",
  4114 + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
  4115 + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
  4116 + "dev": true
  4117 + },
3357 4118 "content-disposition": {
3358 4119 "version": "0.5.3",
3359 4120 "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
... ... @@ -3437,6 +4198,15 @@
3437 4198 "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
3438 4199 "dev": true
3439 4200 },
  4201 + "define-properties": {
  4202 + "version": "1.1.3",
  4203 + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
  4204 + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
  4205 + "dev": true,
  4206 + "requires": {
  4207 + "object-keys": "^1.0.12"
  4208 + }
  4209 + },
3440 4210 "delayed-stream": {
3441 4211 "version": "1.0.0",
3442 4212 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
... ... @@ -3513,6 +4283,45 @@
3513 4283 "ansi-colors": "^4.1.1"
3514 4284 }
3515 4285 },
  4286 + "es-abstract": {
  4287 + "version": "1.19.1",
  4288 + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
  4289 + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
  4290 + "dev": true,
  4291 + "requires": {
  4292 + "call-bind": "^1.0.2",
  4293 + "es-to-primitive": "^1.2.1",
  4294 + "function-bind": "^1.1.1",
  4295 + "get-intrinsic": "^1.1.1",
  4296 + "get-symbol-description": "^1.0.0",
  4297 + "has": "^1.0.3",
  4298 + "has-symbols": "^1.0.2",
  4299 + "internal-slot": "^1.0.3",
  4300 + "is-callable": "^1.2.4",
  4301 + "is-negative-zero": "^2.0.1",
  4302 + "is-regex": "^1.1.4",
  4303 + "is-shared-array-buffer": "^1.0.1",
  4304 + "is-string": "^1.0.7",
  4305 + "is-weakref": "^1.0.1",
  4306 + "object-inspect": "^1.11.0",
  4307 + "object-keys": "^1.1.1",
  4308 + "object.assign": "^4.1.2",
  4309 + "string.prototype.trimend": "^1.0.4",
  4310 + "string.prototype.trimstart": "^1.0.4",
  4311 + "unbox-primitive": "^1.0.1"
  4312 + }
  4313 + },
  4314 + "es-to-primitive": {
  4315 + "version": "1.2.1",
  4316 + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
  4317 + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
  4318 + "dev": true,
  4319 + "requires": {
  4320 + "is-callable": "^1.1.4",
  4321 + "is-date-object": "^1.0.1",
  4322 + "is-symbol": "^1.0.2"
  4323 + }
  4324 + },
3516 4325 "es6-promisify": {
3517 4326 "version": "6.0.0",
3518 4327 "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.0.tgz",
... ... @@ -3530,13 +4339,13 @@
3530 4339 "dev": true
3531 4340 },
3532 4341 "eslint": {
3533   - "version": "8.0.0",
3534   - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.0.0.tgz",
3535   - "integrity": "sha512-03spzPzMAO4pElm44m60Nj08nYonPGQXmw6Ceai/S4QK82IgwWO1EXx1s9namKzVlbVu3Jf81hb+N+8+v21/HQ==",
  4342 + "version": "8.6.0",
  4343 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz",
  4344 + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==",
3536 4345 "dev": true,
3537 4346 "requires": {
3538   - "@eslint/eslintrc": "^1.0.2",
3539   - "@humanwhocodes/config-array": "^0.6.0",
  4347 + "@eslint/eslintrc": "^1.0.5",
  4348 + "@humanwhocodes/config-array": "^0.9.2",
3540 4349 "ajv": "^6.10.0",
3541 4350 "chalk": "^4.0.0",
3542 4351 "cross-spawn": "^7.0.2",
... ... @@ -3544,10 +4353,10 @@
3544 4353 "doctrine": "^3.0.0",
3545 4354 "enquirer": "^2.3.5",
3546 4355 "escape-string-regexp": "^4.0.0",
3547   - "eslint-scope": "^6.0.0",
  4356 + "eslint-scope": "^7.1.0",
3548 4357 "eslint-utils": "^3.0.0",
3549   - "eslint-visitor-keys": "^3.0.0",
3550   - "espree": "^9.0.0",
  4358 + "eslint-visitor-keys": "^3.1.0",
  4359 + "espree": "^9.3.0",
3551 4360 "esquery": "^1.4.0",
3552 4361 "esutils": "^2.0.2",
3553 4362 "fast-deep-equal": "^3.1.3",
... ... @@ -3569,7 +4378,7 @@
3569 4378 "progress": "^2.0.0",
3570 4379 "regexpp": "^3.2.0",
3571 4380 "semver": "^7.2.1",
3572   - "strip-ansi": "^6.0.0",
  4381 + "strip-ansi": "^6.0.1",
3573 4382 "strip-json-comments": "^3.1.0",
3574 4383 "text-table": "^0.2.0",
3575 4384 "v8-compile-cache": "^2.0.3"
... ... @@ -3616,10 +4425,108 @@
3616 4425 }
3617 4426 }
3618 4427 },
  4428 + "eslint-config-airbnb-base": {
  4429 + "version": "15.0.0",
  4430 + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
  4431 + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
  4432 + "dev": true,
  4433 + "requires": {
  4434 + "confusing-browser-globals": "^1.0.10",
  4435 + "object.assign": "^4.1.2",
  4436 + "object.entries": "^1.1.5",
  4437 + "semver": "^6.3.0"
  4438 + }
  4439 + },
  4440 + "eslint-import-resolver-node": {
  4441 + "version": "0.3.6",
  4442 + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
  4443 + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
  4444 + "dev": true,
  4445 + "requires": {
  4446 + "debug": "^3.2.7",
  4447 + "resolve": "^1.20.0"
  4448 + },
  4449 + "dependencies": {
  4450 + "debug": {
  4451 + "version": "3.2.7",
  4452 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
  4453 + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
  4454 + "dev": true,
  4455 + "requires": {
  4456 + "ms": "^2.1.1"
  4457 + }
  4458 + },
  4459 + "ms": {
  4460 + "version": "2.1.3",
  4461 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
  4462 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
  4463 + "dev": true
  4464 + }
  4465 + }
  4466 + },
  4467 + "eslint-module-utils": {
  4468 + "version": "2.7.2",
  4469 + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz",
  4470 + "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==",
  4471 + "dev": true,
  4472 + "requires": {
  4473 + "debug": "^3.2.7",
  4474 + "find-up": "^2.1.0"
  4475 + },
  4476 + "dependencies": {
  4477 + "debug": {
  4478 + "version": "3.2.7",
  4479 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
  4480 + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
  4481 + "dev": true,
  4482 + "requires": {
  4483 + "ms": "^2.1.1"
  4484 + }
  4485 + },
  4486 + "ms": {
  4487 + "version": "2.1.3",
  4488 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
  4489 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
  4490 + "dev": true
  4491 + }
  4492 + }
  4493 + },
  4494 + "eslint-plugin-import": {
  4495 + "version": "2.25.4",
  4496 + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz",
  4497 + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==",
  4498 + "dev": true,
  4499 + "requires": {
  4500 + "array-includes": "^3.1.4",
  4501 + "array.prototype.flat": "^1.2.5",
  4502 + "debug": "^2.6.9",
  4503 + "doctrine": "^2.1.0",
  4504 + "eslint-import-resolver-node": "^0.3.6",
  4505 + "eslint-module-utils": "^2.7.2",
  4506 + "has": "^1.0.3",
  4507 + "is-core-module": "^2.8.0",
  4508 + "is-glob": "^4.0.3",
  4509 + "minimatch": "^3.0.4",
  4510 + "object.values": "^1.1.5",
  4511 + "resolve": "^1.20.0",
  4512 + "tsconfig-paths": "^3.12.0"
  4513 + },
  4514 + "dependencies": {
  4515 + "doctrine": {
  4516 + "version": "2.1.0",
  4517 + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
  4518 + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
  4519 + "dev": true,
  4520 + "requires": {
  4521 + "esutils": "^2.0.2"
  4522 + }
  4523 + }
  4524 + }
  4525 + },
3619 4526 "eslint-scope": {
3620   - "version": "6.0.0",
3621   - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz",
3622   - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==",
  4527 + "version": "7.1.0",
  4528 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz",
  4529 + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==",
3623 4530 "dev": true,
3624 4531 "requires": {
3625 4532 "esrecurse": "^4.3.0",
... ... @@ -3644,28 +4551,22 @@
3644 4551 }
3645 4552 },
3646 4553 "eslint-visitor-keys": {
3647   - "version": "3.0.0",
3648   - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz",
3649   - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==",
  4554 + "version": "3.1.0",
  4555 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz",
  4556 + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==",
3650 4557 "dev": true
3651 4558 },
3652 4559 "espree": {
3653   - "version": "9.0.0",
3654   - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz",
3655   - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==",
  4560 + "version": "9.3.0",
  4561 + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz",
  4562 + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==",
3656 4563 "dev": true,
3657 4564 "requires": {
3658   - "acorn": "^8.5.0",
  4565 + "acorn": "^8.7.0",
3659 4566 "acorn-jsx": "^5.3.1",
3660   - "eslint-visitor-keys": "^3.0.0"
  4567 + "eslint-visitor-keys": "^3.1.0"
3661 4568 }
3662 4569 },
3663   - "esprima": {
3664   - "version": "4.0.1",
3665   - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
3666   - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
3667   - "dev": true
3668   - },
3669 4570 "esquery": {
3670 4571 "version": "1.4.0",
3671 4572 "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
... ... @@ -3927,6 +4828,15 @@
3927 4828 }
3928 4829 }
3929 4830 },
  4831 + "find-up": {
  4832 + "version": "2.1.0",
  4833 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
  4834 + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
  4835 + "dev": true,
  4836 + "requires": {
  4837 + "locate-path": "^2.0.0"
  4838 + }
  4839 + },
3930 4840 "flat-cache": {
3931 4841 "version": "3.0.4",
3932 4842 "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
... ... @@ -3986,12 +4896,39 @@
3986 4896 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
3987 4897 "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
3988 4898 },
  4899 + "function-bind": {
  4900 + "version": "1.1.1",
  4901 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
  4902 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
  4903 + "dev": true
  4904 + },
3989 4905 "functional-red-black-tree": {
3990 4906 "version": "1.0.1",
3991 4907 "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
3992 4908 "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
3993 4909 "dev": true
3994 4910 },
  4911 + "get-intrinsic": {
  4912 + "version": "1.1.1",
  4913 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
  4914 + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
  4915 + "dev": true,
  4916 + "requires": {
  4917 + "function-bind": "^1.1.1",
  4918 + "has": "^1.0.3",
  4919 + "has-symbols": "^1.0.1"
  4920 + }
  4921 + },
  4922 + "get-symbol-description": {
  4923 + "version": "1.0.0",
  4924 + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
  4925 + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
  4926 + "dev": true,
  4927 + "requires": {
  4928 + "call-bind": "^1.0.2",
  4929 + "get-intrinsic": "^1.1.1"
  4930 + }
  4931 + },
3995 4932 "getpass": {
3996 4933 "version": "0.1.7",
3997 4934 "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
... ... @@ -4023,9 +4960,9 @@
4023 4960 }
4024 4961 },
4025 4962 "globals": {
4026   - "version": "13.11.0",
4027   - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
4028   - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
  4963 + "version": "13.12.0",
  4964 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
  4965 + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
4029 4966 "dev": true,
4030 4967 "requires": {
4031 4968 "type-fest": "^0.20.2"
... ... @@ -4057,12 +4994,42 @@
4057 4994 "har-schema": "^2.0.0"
4058 4995 }
4059 4996 },
  4997 + "has": {
  4998 + "version": "1.0.3",
  4999 + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
  5000 + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
  5001 + "dev": true,
  5002 + "requires": {
  5003 + "function-bind": "^1.1.1"
  5004 + }
  5005 + },
  5006 + "has-bigints": {
  5007 + "version": "1.0.1",
  5008 + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
  5009 + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
  5010 + "dev": true
  5011 + },
4060 5012 "has-flag": {
4061 5013 "version": "4.0.0",
4062 5014 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
4063 5015 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
4064 5016 "dev": true
4065 5017 },
  5018 + "has-symbols": {
  5019 + "version": "1.0.2",
  5020 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
  5021 + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
  5022 + "dev": true
  5023 + },
  5024 + "has-tostringtag": {
  5025 + "version": "1.0.0",
  5026 + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
  5027 + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
  5028 + "dev": true,
  5029 + "requires": {
  5030 + "has-symbols": "^1.0.2"
  5031 + }
  5032 + },
4066 5033 "http-errors": {
4067 5034 "version": "1.6.2",
4068 5035 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
... ... @@ -4132,6 +5099,17 @@
4132 5099 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
4133 5100 "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
4134 5101 },
  5102 + "internal-slot": {
  5103 + "version": "1.0.3",
  5104 + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
  5105 + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
  5106 + "dev": true,
  5107 + "requires": {
  5108 + "get-intrinsic": "^1.1.0",
  5109 + "has": "^1.0.3",
  5110 + "side-channel": "^1.0.4"
  5111 + }
  5112 + },
4135 5113 "ipaddr.js": {
4136 5114 "version": "1.9.1",
4137 5115 "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
... ... @@ -4142,6 +5120,49 @@
4142 5120 "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
4143 5121 "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
4144 5122 },
  5123 + "is-bigint": {
  5124 + "version": "1.0.4",
  5125 + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
  5126 + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
  5127 + "dev": true,
  5128 + "requires": {
  5129 + "has-bigints": "^1.0.1"
  5130 + }
  5131 + },
  5132 + "is-boolean-object": {
  5133 + "version": "1.1.2",
  5134 + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
  5135 + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
  5136 + "dev": true,
  5137 + "requires": {
  5138 + "call-bind": "^1.0.2",
  5139 + "has-tostringtag": "^1.0.0"
  5140 + }
  5141 + },
  5142 + "is-callable": {
  5143 + "version": "1.2.4",
  5144 + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
  5145 + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
  5146 + "dev": true
  5147 + },
  5148 + "is-core-module": {
  5149 + "version": "2.8.1",
  5150 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
  5151 + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
  5152 + "dev": true,
  5153 + "requires": {
  5154 + "has": "^1.0.3"
  5155 + }
  5156 + },
  5157 + "is-date-object": {
  5158 + "version": "1.0.5",
  5159 + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
  5160 + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
  5161 + "dev": true,
  5162 + "requires": {
  5163 + "has-tostringtag": "^1.0.0"
  5164 + }
  5165 + },
4145 5166 "is-extglob": {
4146 5167 "version": "2.1.1",
4147 5168 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
... ... @@ -4157,16 +5178,74 @@
4157 5178 "is-extglob": "^2.1.1"
4158 5179 }
4159 5180 },
  5181 + "is-negative-zero": {
  5182 + "version": "2.0.2",
  5183 + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
  5184 + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
  5185 + "dev": true
  5186 + },
  5187 + "is-number-object": {
  5188 + "version": "1.0.6",
  5189 + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
  5190 + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
  5191 + "dev": true,
  5192 + "requires": {
  5193 + "has-tostringtag": "^1.0.0"
  5194 + }
  5195 + },
  5196 + "is-regex": {
  5197 + "version": "1.1.4",
  5198 + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
  5199 + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
  5200 + "dev": true,
  5201 + "requires": {
  5202 + "call-bind": "^1.0.2",
  5203 + "has-tostringtag": "^1.0.0"
  5204 + }
  5205 + },
  5206 + "is-shared-array-buffer": {
  5207 + "version": "1.0.1",
  5208 + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
  5209 + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
  5210 + "dev": true
  5211 + },
4160 5212 "is-stream": {
4161 5213 "version": "2.0.1",
4162 5214 "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
4163 5215 "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
4164 5216 },
  5217 + "is-string": {
  5218 + "version": "1.0.7",
  5219 + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
  5220 + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
  5221 + "dev": true,
  5222 + "requires": {
  5223 + "has-tostringtag": "^1.0.0"
  5224 + }
  5225 + },
  5226 + "is-symbol": {
  5227 + "version": "1.0.4",
  5228 + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
  5229 + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
  5230 + "dev": true,
  5231 + "requires": {
  5232 + "has-symbols": "^1.0.2"
  5233 + }
  5234 + },
4165 5235 "is-typedarray": {
4166 5236 "version": "1.0.0",
4167 5237 "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
4168 5238 "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
4169 5239 },
  5240 + "is-weakref": {
  5241 + "version": "1.0.2",
  5242 + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
  5243 + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
  5244 + "dev": true,
  5245 + "requires": {
  5246 + "call-bind": "^1.0.2"
  5247 + }
  5248 + },
4170 5249 "isarray": {
4171 5250 "version": "1.0.0",
4172 5251 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
... ... @@ -4228,6 +5307,15 @@
4228 5307 "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
4229 5308 "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
4230 5309 },
  5310 + "json5": {
  5311 + "version": "1.0.1",
  5312 + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
  5313 + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
  5314 + "dev": true,
  5315 + "requires": {
  5316 + "minimist": "^1.2.0"
  5317 + }
  5318 + },
4231 5319 "jsprim": {
4232 5320 "version": "1.4.1",
4233 5321 "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
... ... @@ -4254,6 +5342,16 @@
4254 5342 "type-check": "~0.4.0"
4255 5343 }
4256 5344 },
  5345 + "locate-path": {
  5346 + "version": "2.0.0",
  5347 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
  5348 + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
  5349 + "dev": true,
  5350 + "requires": {
  5351 + "p-locate": "^2.0.0",
  5352 + "path-exists": "^3.0.0"
  5353 + }
  5354 + },
4257 5355 "lodash": {
4258 5356 "version": "4.17.21",
4259 5357 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
... ... @@ -4417,6 +5515,52 @@
4417 5515 "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
4418 5516 "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
4419 5517 },
  5518 + "object-inspect": {
  5519 + "version": "1.12.0",
  5520 + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
  5521 + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
  5522 + "dev": true
  5523 + },
  5524 + "object-keys": {
  5525 + "version": "1.1.1",
  5526 + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
  5527 + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
  5528 + "dev": true
  5529 + },
  5530 + "object.assign": {
  5531 + "version": "4.1.2",
  5532 + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
  5533 + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
  5534 + "dev": true,
  5535 + "requires": {
  5536 + "call-bind": "^1.0.0",
  5537 + "define-properties": "^1.1.3",
  5538 + "has-symbols": "^1.0.1",
  5539 + "object-keys": "^1.1.1"
  5540 + }
  5541 + },
  5542 + "object.entries": {
  5543 + "version": "1.1.5",
  5544 + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
  5545 + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
  5546 + "dev": true,
  5547 + "requires": {
  5548 + "call-bind": "^1.0.2",
  5549 + "define-properties": "^1.1.3",
  5550 + "es-abstract": "^1.19.1"
  5551 + }
  5552 + },
  5553 + "object.values": {
  5554 + "version": "1.1.5",
  5555 + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
  5556 + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
  5557 + "dev": true,
  5558 + "requires": {
  5559 + "call-bind": "^1.0.2",
  5560 + "define-properties": "^1.1.3",
  5561 + "es-abstract": "^1.19.1"
  5562 + }
  5563 + },
4420 5564 "on-finished": {
4421 5565 "version": "2.3.0",
4422 5566 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
... ... @@ -4460,6 +5604,30 @@
4460 5604 "word-wrap": "^1.2.3"
4461 5605 }
4462 5606 },
  5607 + "p-limit": {
  5608 + "version": "1.3.0",
  5609 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
  5610 + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
  5611 + "dev": true,
  5612 + "requires": {
  5613 + "p-try": "^1.0.0"
  5614 + }
  5615 + },
  5616 + "p-locate": {
  5617 + "version": "2.0.0",
  5618 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
  5619 + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
  5620 + "dev": true,
  5621 + "requires": {
  5622 + "p-limit": "^1.1.0"
  5623 + }
  5624 + },
  5625 + "p-try": {
  5626 + "version": "1.0.0",
  5627 + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
  5628 + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
  5629 + "dev": true
  5630 + },
4463 5631 "parent-module": {
4464 5632 "version": "1.0.1",
4465 5633 "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
... ... @@ -4479,6 +5647,12 @@
4479 5647 "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
4480 5648 "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
4481 5649 },
  5650 + "path-exists": {
  5651 + "version": "3.0.0",
  5652 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
  5653 + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
  5654 + "dev": true
  5655 + },
4482 5656 "path-is-absolute": {
4483 5657 "version": "1.0.1",
4484 5658 "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
... ... @@ -4490,6 +5664,12 @@
4490 5664 "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
4491 5665 "dev": true
4492 5666 },
  5667 + "path-parse": {
  5668 + "version": "1.0.7",
  5669 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
  5670 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
  5671 + "dev": true
  5672 + },
4493 5673 "path-to-regexp": {
4494 5674 "version": "0.1.7",
4495 5675 "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
... ... @@ -4656,6 +5836,17 @@
4656 5836 }
4657 5837 }
4658 5838 },
  5839 + "resolve": {
  5840 + "version": "1.21.0",
  5841 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz",
  5842 + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==",
  5843 + "dev": true,
  5844 + "requires": {
  5845 + "is-core-module": "^2.8.0",
  5846 + "path-parse": "^1.0.7",
  5847 + "supports-preserve-symlinks-flag": "^1.0.0"
  5848 + }
  5849 + },
4659 5850 "resolve-from": {
4660 5851 "version": "4.0.0",
4661 5852 "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
... ... @@ -4787,6 +5978,17 @@
4787 5978 "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
4788 5979 "dev": true
4789 5980 },
  5981 + "side-channel": {
  5982 + "version": "1.0.4",
  5983 + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
  5984 + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
  5985 + "dev": true,
  5986 + "requires": {
  5987 + "call-bind": "^1.0.0",
  5988 + "get-intrinsic": "^1.0.2",
  5989 + "object-inspect": "^1.9.0"
  5990 + }
  5991 + },
4790 5992 "simple-git": {
4791 5993 "version": "1.80.1",
4792 5994 "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.80.1.tgz",
... ... @@ -4808,12 +6010,6 @@
4808 6010 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
4809 6011 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
4810 6012 },
4811   - "sprintf-js": {
4812   - "version": "1.0.3",
4813   - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
4814   - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
4815   - "dev": true
4816   - },
4817 6013 "sshpk": {
4818 6014 "version": "1.16.1",
4819 6015 "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
... ... @@ -4865,6 +6061,26 @@
4865 6061 "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-2.0.2.tgz",
4866 6062 "integrity": "sha1-xc5OJ4q10SZa5vxVQ1rre3b8sAE="
4867 6063 },
  6064 + "string.prototype.trimend": {
  6065 + "version": "1.0.4",
  6066 + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
  6067 + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
  6068 + "dev": true,
  6069 + "requires": {
  6070 + "call-bind": "^1.0.2",
  6071 + "define-properties": "^1.1.3"
  6072 + }
  6073 + },
  6074 + "string.prototype.trimstart": {
  6075 + "version": "1.0.4",
  6076 + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
  6077 + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
  6078 + "dev": true,
  6079 + "requires": {
  6080 + "call-bind": "^1.0.2",
  6081 + "define-properties": "^1.1.3"
  6082 + }
  6083 + },
4868 6084 "strip-ansi": {
4869 6085 "version": "6.0.1",
4870 6086 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
... ... @@ -4874,6 +6090,12 @@
4874 6090 "ansi-regex": "^5.0.1"
4875 6091 }
4876 6092 },
  6093 + "strip-bom": {
  6094 + "version": "3.0.0",
  6095 + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
  6096 + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
  6097 + "dev": true
  6098 + },
4877 6099 "strip-json-comments": {
4878 6100 "version": "3.1.1",
4879 6101 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
... ... @@ -4889,6 +6111,12 @@
4889 6111 "has-flag": "^4.0.0"
4890 6112 }
4891 6113 },
  6114 + "supports-preserve-symlinks-flag": {
  6115 + "version": "1.0.0",
  6116 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
  6117 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
  6118 + "dev": true
  6119 + },
4892 6120 "tektrans-logger": {
4893 6121 "version": "1.2.3",
4894 6122 "resolved": "https://registry.npmjs.org/tektrans-logger/-/tektrans-logger-1.2.3.tgz",
... ... @@ -4953,6 +6181,18 @@
4953 6181 "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
4954 6182 "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
4955 6183 },
  6184 + "tsconfig-paths": {
  6185 + "version": "3.12.0",
  6186 + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz",
  6187 + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==",
  6188 + "dev": true,
  6189 + "requires": {
  6190 + "@types/json5": "^0.0.29",
  6191 + "json5": "^1.0.1",
  6192 + "minimist": "^1.2.0",
  6193 + "strip-bom": "^3.0.0"
  6194 + }
  6195 + },
4956 6196 "tunnel-agent": {
4957 6197 "version": "0.6.0",
4958 6198 "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
... ... @@ -5019,6 +6259,18 @@
5019 6259 "random-bytes": "~1.0.0"
5020 6260 }
5021 6261 },
  6262 + "unbox-primitive": {
  6263 + "version": "1.0.1",
  6264 + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
  6265 + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
  6266 + "dev": true,
  6267 + "requires": {
  6268 + "function-bind": "^1.1.1",
  6269 + "has-bigints": "^1.0.1",
  6270 + "has-symbols": "^1.0.2",
  6271 + "which-boxed-primitive": "^1.0.2"
  6272 + }
  6273 + },
5022 6274 "uniqid": {
5023 6275 "version": "4.1.1",
5024 6276 "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz",
... ... @@ -5047,6 +6299,11 @@
5047 6299 }
5048 6300 }
5049 6301 },
  6302 + "url-join": {
  6303 + "version": "4.0.1",
  6304 + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
  6305 + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="
  6306 + },
5050 6307 "util-deprecate": {
5051 6308 "version": "1.0.2",
5052 6309 "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
... ... @@ -5092,6 +6349,19 @@
5092 6349 "isexe": "^2.0.0"
5093 6350 }
5094 6351 },
  6352 + "which-boxed-primitive": {
  6353 + "version": "1.0.2",
  6354 + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
  6355 + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
  6356 + "dev": true,
  6357 + "requires": {
  6358 + "is-bigint": "^1.0.1",
  6359 + "is-boolean-object": "^1.1.0",
  6360 + "is-number-object": "^1.0.4",
  6361 + "is-string": "^1.0.5",
  6362 + "is-symbol": "^1.0.3"
  6363 + }
  6364 + },
5095 6365 "winston": {
5096 6366 "version": "3.3.3",
5097 6367 "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz",
... ... @@ -47,9 +47,12 @@
47 47 "string-natural-compare": "^2.0.2",
48 48 "tektrans-logger": "^1.2.3",
49 49 "uniqid": "^4.1.1",
  50 + "url-join": "^4.0.1",
50 51 "uuid": "^3.4.0"
51 52 },
52 53 "devDependencies": {
53   - "eslint": "^8.0.0"
  54 + "eslint": "^8.6.0",
  55 + "eslint-config-airbnb-base": "^15.0.0",
  56 + "eslint-plugin-import": "^2.25.4"
54 57 }
55 58 }