From b35f0ceef8409bfa26ec3e0f07d0daec2d6baa07 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Thu, 24 Oct 2019 12:16:51 +0100 Subject: [PATCH 01/30] Update to lock file --- pnpm-lock.yaml | 607 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 607 insertions(+) create mode 100644 pnpm-lock.yaml diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..d03aa406 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,607 @@ +dependencies: + bitsyntax: 0.1.0 + bluebird: 3.7.1 + buffer-more-ints: 1.0.0 + readable-stream: 1.1.14 + safe-buffer: 5.1.2 + url-parse: 1.4.7 +devDependencies: + claire: 0.4.1 + istanbul: 0.1.46 + mocha: 3.5.3 + uglify-js: 2.6.4 +lockfileVersion: 5.1 +packages: + /abbrev/1.0.9: + dev: true + resolution: + integrity: sha1-kbR5JYinc4wl813W9jdSovh3YTU= + /abbrev/1.1.1: + dev: true + resolution: + integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + /align-text/0.1.4: + dependencies: + kind-of: 3.2.2 + longest: 1.0.1 + repeat-string: 1.6.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + /amdefine/1.0.1: + dev: true + engines: + node: '>=0.4.2' + resolution: + integrity: sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + /async/0.2.10: + dev: true + resolution: + integrity: sha1-trvgsGdLnXGXCMo43owjfLUmw9E= + /balanced-match/1.0.0: + dev: true + resolution: + integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + /bitsyntax/0.1.0: + dependencies: + buffer-more-ints: 1.0.0 + debug: 2.6.9 + safe-buffer: 5.1.2 + dev: false + engines: + node: '>=0.8' + resolution: + integrity: sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== + /bluebird/3.7.1: + dev: false + resolution: + integrity: sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + /boo/1.2.4: + dev: true + resolution: + integrity: sha1-szMxw2xK552C9P0ORJBgTLfFE7U= + /brace-expansion/1.1.11: + dependencies: + balanced-match: 1.0.0 + concat-map: 0.0.1 + dev: true + resolution: + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /browser-stdout/1.3.0: + dev: true + resolution: + integrity: sha1-81HTKWnTL6XXpVZxVCY9korjvR8= + /buffer-more-ints/1.0.0: + dev: false + resolution: + integrity: sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== + /camelcase/1.2.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + /center-align/0.1.3: + dependencies: + align-text: 0.1.4 + lazy-cache: 1.0.4 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + /claire/0.4.1: + dependencies: + boo: 1.2.4 + flaw: 0.1.0 + prelude-ls: 0.6.0 + dev: true + resolution: + integrity: sha1-ynDcEmHd2PJaGvq604BcOfziY7w= + /cliui/2.1.0: + dependencies: + center-align: 0.1.3 + right-align: 0.1.3 + wordwrap: 0.0.2 + dev: true + resolution: + integrity: sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + /commander/2.9.0: + dependencies: + graceful-readlink: 1.0.1 + dev: true + engines: + node: '>= 0.6.x' + resolution: + integrity: sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= + /concat-map/0.0.1: + dev: true + resolution: + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /core-util-is/1.0.2: + dev: false + resolution: + integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + /debug/2.6.8: + dependencies: + ms: 2.0.0 + dev: true + resolution: + integrity: sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw= + /debug/2.6.9: + dependencies: + ms: 2.0.0 + dev: false + resolution: + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /decamelize/1.2.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + /diff/3.2.0: + dev: true + engines: + node: '>=0.3.1' + resolution: + integrity: sha1-yc45Okt8vQsFinJck98pkCeGj/k= + /escape-string-regexp/1.0.5: + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + /escodegen/0.0.23: + dependencies: + esprima: 1.0.4 + estraverse: 0.0.4 + dev: true + engines: + node: '>=0.4.0' + hasBin: true + optionalDependencies: + source-map: 0.7.3 + resolution: + integrity: sha1-ms+XgWQ2jkInZXHxiDnII7OoRN8= + /esprima/1.0.4: + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= + /estraverse/0.0.4: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI= + /fileset/0.1.8: + dependencies: + glob: 3.2.11 + minimatch: 0.4.0 + dev: true + resolution: + integrity: sha1-UGuRqTluqn4y+0KoQHfHoMc2t0E= + /flaw/0.1.0: + dev: true + resolution: + integrity: sha1-wMPo+BYWdTh+2tofbOhNZ5sCUn8= + /fs.realpath/1.0.0: + dev: true + resolution: + integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /glob/3.2.11: + dependencies: + inherits: 2.0.4 + minimatch: 0.3.0 + dev: true + resolution: + integrity: sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0= + /glob/7.1.1: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + resolution: + integrity: sha1-gFIR3wT6rxxjo2ADBs31reULLsg= + /graceful-readlink/1.0.1: + dev: true + resolution: + integrity: sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + /growl/1.9.2: + dev: true + resolution: + integrity: sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= + /handlebars/1.0.12: + dependencies: + optimist: 0.3.7 + uglify-js: 2.3.6 + dev: true + engines: + node: '>=0.4.7' + hasBin: true + resolution: + integrity: sha1-GMbTRAw16RsZs/9YK5FRq0mF1Pw= + /has-flag/1.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + /he/1.1.1: + dev: true + hasBin: true + resolution: + integrity: sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.4: + resolution: + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /is-buffer/1.1.6: + dev: true + resolution: + integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + /isarray/0.0.1: + dev: false + resolution: + integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + /istanbul/0.1.46: + dependencies: + abbrev: 1.0.9 + async: 0.2.10 + escodegen: 0.0.23 + esprima: 1.0.4 + fileset: 0.1.8 + handlebars: 1.0.12 + mkdirp: 0.3.5 + nopt: 2.1.2 + resolve: 0.5.1 + which: 1.0.9 + wordwrap: 0.0.3 + deprecated: |- + This module is no longer maintained, try this instead: + npm i nyc + Visit https://istanbul.js.org/integrations for other alternatives. + dev: true + hasBin: true + resolution: + integrity: sha1-zv6xx4fRJabbI70PY7Drk5CwtA0= + /json3/3.3.2: + deprecated: Please use the native JSON object instead of JSON 3 + dev: true + resolution: + integrity: sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= + /kind-of/3.2.2: + dependencies: + is-buffer: 1.1.6 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + /lazy-cache/1.0.4: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-odePw6UEdMuAhF07O24dpJpEbo4= + /lodash._baseassign/3.2.0: + dependencies: + lodash._basecopy: 3.0.1 + lodash.keys: 3.1.2 + dev: true + resolution: + integrity: sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= + /lodash._basecopy/3.0.1: + dev: true + resolution: + integrity: sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= + /lodash._basecreate/3.0.3: + dev: true + resolution: + integrity: sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE= + /lodash._getnative/3.9.1: + dev: true + resolution: + integrity: sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + /lodash._isiterateecall/3.0.9: + dev: true + resolution: + integrity: sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= + /lodash.create/3.1.1: + dependencies: + lodash._baseassign: 3.2.0 + lodash._basecreate: 3.0.3 + lodash._isiterateecall: 3.0.9 + dev: true + resolution: + integrity: sha1-1/KEnw29p+BGgruM1yqwIkYd6+c= + /lodash.isarguments/3.1.0: + dev: true + resolution: + integrity: sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= + /lodash.isarray/3.0.4: + dev: true + resolution: + integrity: sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= + /lodash.keys/3.1.2: + dependencies: + lodash._getnative: 3.9.1 + lodash.isarguments: 3.1.0 + lodash.isarray: 3.0.4 + dev: true + resolution: + integrity: sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= + /longest/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + /lru-cache/2.7.3: + dev: true + resolution: + integrity: sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= + /minimatch/0.3.0: + dependencies: + lru-cache: 2.7.3 + sigmund: 1.0.1 + deprecated: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue + dev: true + resolution: + integrity: sha1-J12O2qxPG7MyZHIInnlJyDlGmd0= + /minimatch/0.4.0: + dependencies: + lru-cache: 2.7.3 + sigmund: 1.0.1 + deprecated: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue + dev: true + resolution: + integrity: sha1-vSx9Bg0sjI/Xzefx8u0tWycP2xs= + /minimatch/3.0.4: + dependencies: + brace-expansion: 1.1.11 + dev: true + resolution: + integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /minimist/0.0.8: + dev: true + resolution: + integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + /mkdirp/0.3.5: + dev: true + resolution: + integrity: sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= + /mkdirp/0.5.1: + dependencies: + minimist: 0.0.8 + dev: true + hasBin: true + resolution: + integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + /mocha/3.5.3: + dependencies: + browser-stdout: 1.3.0 + commander: 2.9.0 + debug: 2.6.8 + diff: 3.2.0 + escape-string-regexp: 1.0.5 + glob: 7.1.1 + growl: 1.9.2 + he: 1.1.1 + json3: 3.3.2 + lodash.create: 3.1.1 + mkdirp: 0.5.1 + supports-color: 3.1.2 + dev: true + engines: + node: '>= 0.10.x' + npm: '>= 1.4.x' + hasBin: true + resolution: + integrity: sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg== + /ms/2.0.0: + resolution: + integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + /nopt/2.1.2: + dependencies: + abbrev: 1.1.1 + dev: true + hasBin: true + resolution: + integrity: sha1-bMzZd7gBMqB3MdbozljCyDA8+a8= + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /optimist/0.3.7: + dependencies: + wordwrap: 0.0.3 + dev: true + resolution: + integrity: sha1-yQlBrVnkJzMokjB00s8ufLxuwNk= + /path-is-absolute/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /prelude-ls/0.6.0: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-z4JLS0fMc8vZb56YhQc7Q6rqqzs= + /querystringify/2.1.1: + dev: false + resolution: + integrity: sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + /readable-stream/1.1.14: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + resolution: + integrity: sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + /repeat-string/1.6.1: + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc= + /requires-port/1.0.0: + dev: false + resolution: + integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + /resolve/0.5.1: + dev: true + resolution: + integrity: sha1-FeSiIsQja81M+FRUQSwtD7ZSRXY= + /right-align/0.1.3: + dependencies: + align-text: 0.1.4 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + /safe-buffer/5.1.2: + dev: false + resolution: + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + /sigmund/1.0.1: + dev: true + resolution: + integrity: sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= + /source-map/0.1.43: + dependencies: + amdefine: 1.0.1 + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= + /source-map/0.5.7: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + /source-map/0.7.3: + dev: true + engines: + node: '>= 8' + optional: true + resolution: + integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + /string_decoder/0.10.31: + dev: false + resolution: + integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + /supports-color/3.1.2: + dependencies: + has-flag: 1.0.0 + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-cqJiiU2dQIuVbKBf83su2KbiotU= + /uglify-js/2.3.6: + dependencies: + async: 0.2.10 + optimist: 0.3.7 + source-map: 0.1.43 + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo= + /uglify-js/2.6.4: + dependencies: + async: 0.2.10 + source-map: 0.5.7 + uglify-to-browserify: 1.0.2 + yargs: 3.10.0 + dev: true + engines: + node: '>=0.8.0' + hasBin: true + resolution: + integrity: sha1-ZeovswWck5RpLxX+2HwrNsFrmt8= + /uglify-to-browserify/1.0.2: + dev: true + resolution: + integrity: sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + /url-parse/1.4.7: + dependencies: + querystringify: 2.1.1 + requires-port: 1.0.0 + dev: false + resolution: + integrity: sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + /which/1.0.9: + dev: true + hasBin: true + resolution: + integrity: sha1-RgwdoPgQED0DIam2M6+eV15kSG8= + /window-size/0.1.0: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + /wordwrap/0.0.2: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + /wordwrap/0.0.3: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + /wrappy/1.0.2: + dev: true + resolution: + integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /yargs/3.10.0: + dependencies: + camelcase: 1.2.1 + cliui: 2.1.0 + decamelize: 1.2.0 + window-size: 0.1.0 + dev: true + resolution: + integrity: sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= +specifiers: + bitsyntax: ~0.1.0 + bluebird: ^3.5.2 + buffer-more-ints: ~1.0.0 + claire: 0.4.1 + istanbul: 0.1.x + mocha: ^3.5.3 + readable-stream: 1.x >=1.1.9 + safe-buffer: ~5.1.2 + uglify-js: 2.6.x + url-parse: ~1.4.3 From 59bd4a3482a2bf219a0a4e6bd8ee2e050184b0cb Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 29 Oct 2019 22:40:33 +0000 Subject: [PATCH 02/30] Update to use custom Promise libray --- channel_api.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/channel_api.js b/channel_api.js index 6c8c4dd7..2aa25614 100644 --- a/channel_api.js +++ b/channel_api.js @@ -1,15 +1,21 @@ var raw_connect = require('./lib/connect').connect; var ChannelModel = require('./lib/channel_model').ChannelModel; -var Promise = require('bluebird'); function connect(url, connOptions) { - return Promise.fromCallback(function(cb) { - return raw_connect(url, connOptions, cb); - }) - .then(function(conn) { - return new ChannelModel(conn); + var options = { Promise: connOptions.Promise }; + + return new options.Promise(function(resolve, reject) { + raw_connect(url, connOptions, function(err, result) { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }).then(function(conn) { + return new ChannelModel(conn, options); }); -}; +} module.exports.connect = connect; module.exports.credentials = require('./lib/credentials'); From c0eb7ed3b6fda1137d6f4c24f1ba6b56e4a1b403 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 29 Oct 2019 22:40:52 +0000 Subject: [PATCH 03/30] Update to use custom Promise libra --- .editorconfig | 12 + .eslintignore | 5 + .eslintrc.js | 23 + lib/callback_model.js | 217 +++----- lib/channel.js | 535 +++++++++--------- lib/channel_model.js | 210 +++---- pnpm-debug.log | 22 + pnpm-lock.yaml | 607 ++++++++++++++++++++ test/channel.js | 1235 +++++++++++++++++++++++------------------ test/channel_api.js | 902 +++++++++++++++--------------- 10 files changed, 2266 insertions(+), 1502 deletions(-) create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 pnpm-debug.log create mode 100644 pnpm-lock.yaml diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..4a7ea303 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..f53e9ccf --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +.vscode/ +config/ +dist/ +node_modules/ +webpack \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..5d721c17 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,23 @@ +module.exports = { + env: { + es6: true, + node: true + }, + extends: ['eslint:recommended', 'plugin:import/errors', 'plugin:import/warnings', 'prettier'], + parserOptions: { + ecmaVersion: 2017, + sourceType: 'module' + }, + rules: { + //'no-unused-vars': ['error', { args: 'none' }], + //'no-console': 'off', + //'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + //'no-duplicate-imports': 'error', + //'require-atomic-updates': 'off', + //indent: ['error', 2], + //'linebreak-style': ['error', 'unix'], + quotes: ['error', 'double', { avoidEscape: true }], + semi: ['error', 'always'] + //'brace-style': ['error', '1tbs', { allowSingleLine: true }] + } +}; diff --git a/lib/callback_model.js b/lib/callback_model.js index dca383f8..bbf38e7d 100644 --- a/lib/callback_model.js +++ b/lib/callback_model.js @@ -5,18 +5,17 @@ 'use strict'; var defs = require('./defs'); -var Promise = require('bluebird'); var inherits = require('util').inherits; var EventEmitter = require('events').EventEmitter; var BaseChannel = require('./channel').BaseChannel; var acceptMessage = require('./channel').acceptMessage; var Args = require('./api_args'); -function CallbackModel(connection) { - if (!(this instanceof CallbackModel)) - return new CallbackModel(connection); - EventEmitter.call( this ); +function CallbackModel(connection, options) { + if (!(this instanceof CallbackModel)) return new CallbackModel(connection); + EventEmitter.call(this); this.connection = connection; + this.Promise = options; var self = this; ['error', 'close', 'blocked', 'unblocked'].forEach(function(ev) { connection.on(ev, self.emit.bind(self, ev)); @@ -54,12 +53,13 @@ CallbackModel.prototype.createChannel = function(cb) { // otherwise falsey, for convenience in methods for which the callback // is optional (that is, most of them). function callbackWrapper(ch, cb) { - return (cb) ? function(err, ok) { - if (err === null) { - cb(null, ok); - } - else cb(err); - } : function() {}; + return cb + ? function(err, ok) { + if (err === null) { + cb(null, ok); + } else cb(err); + } + : function() {}; } // This encodes straight-forward RPC: no side-effects and return the @@ -72,7 +72,7 @@ Channel.prototype.rpc = function(method, fields, expect, cb0) { var cb = callbackWrapper(this, cb0); this._rpc(method, fields, expect, function(err, ok) { cb(err, ok && ok.fields); // in case of an error, ok will be - // undefined + // undefined }); return this; }; @@ -80,96 +80,73 @@ Channel.prototype.rpc = function(method, fields, expect, cb0) { // === Public API === Channel.prototype.open = function(cb) { - try { this.allocate(); } - catch (e) { return cb(e); } + try { + this.allocate(); + } catch (e) { + return cb(e); + } - return this.rpc(defs.ChannelOpen, {outOfBand: ""}, - defs.ChannelOpenOk, cb); + return this.rpc(defs.ChannelOpen, { outOfBand: '' }, defs.ChannelOpenOk, cb); }; Channel.prototype.close = function(cb) { - return this.closeBecause("Goodbye", defs.constants.REPLY_SUCCESS, - function() { cb && cb(null); }); + return this.closeBecause('Goodbye', defs.constants.REPLY_SUCCESS, function() { + cb && cb(null); + }); }; Channel.prototype.assertQueue = function(queue, options, cb) { - return this.rpc(defs.QueueDeclare, - Args.assertQueue(queue, options), - defs.QueueDeclareOk, cb); + return this.rpc(defs.QueueDeclare, Args.assertQueue(queue, options), defs.QueueDeclareOk, cb); }; Channel.prototype.checkQueue = function(queue, cb) { - return this.rpc(defs.QueueDeclare, - Args.checkQueue(queue), - defs.QueueDeclareOk, cb); + return this.rpc(defs.QueueDeclare, Args.checkQueue(queue), defs.QueueDeclareOk, cb); }; Channel.prototype.deleteQueue = function(queue, options, cb) { - return this.rpc(defs.QueueDelete, - Args.deleteQueue(queue, options), - defs.QueueDeleteOk, cb); + return this.rpc(defs.QueueDelete, Args.deleteQueue(queue, options), defs.QueueDeleteOk, cb); }; Channel.prototype.purgeQueue = function(queue, cb) { - return this.rpc(defs.QueuePurge, - Args.purgeQueue(queue), - defs.QueuePurgeOk, cb); + return this.rpc(defs.QueuePurge, Args.purgeQueue(queue), defs.QueuePurgeOk, cb); }; -Channel.prototype.bindQueue = - function(queue, source, pattern, argt, cb) { - return this.rpc(defs.QueueBind, - Args.bindQueue(queue, source, pattern, argt), - defs.QueueBindOk, cb); - }; +Channel.prototype.bindQueue = function(queue, source, pattern, argt, cb) { + return this.rpc(defs.QueueBind, Args.bindQueue(queue, source, pattern, argt), defs.QueueBindOk, cb); +}; -Channel.prototype.unbindQueue = - function(queue, source, pattern, argt, cb) { - return this.rpc(defs.QueueUnbind, - Args.unbindQueue(queue, source, pattern, argt), - defs.QueueUnbindOk, cb); - }; +Channel.prototype.unbindQueue = function(queue, source, pattern, argt, cb) { + return this.rpc(defs.QueueUnbind, Args.unbindQueue(queue, source, pattern, argt), defs.QueueUnbindOk, cb); +}; Channel.prototype.assertExchange = function(ex, type, options, cb0) { var cb = callbackWrapper(this, cb0); - this._rpc(defs.ExchangeDeclare, - Args.assertExchange(ex, type, options), - defs.ExchangeDeclareOk, - function(e, _) { cb(e, {exchange: ex}); }); + this._rpc(defs.ExchangeDeclare, Args.assertExchange(ex, type, options), defs.ExchangeDeclareOk, function(e, _) { + cb(e, { exchange: ex }); + }); return this; }; Channel.prototype.checkExchange = function(exchange, cb) { - return this.rpc(defs.ExchangeDeclare, - Args.checkExchange(exchange), - defs.ExchangeDeclareOk, cb); + return this.rpc(defs.ExchangeDeclare, Args.checkExchange(exchange), defs.ExchangeDeclareOk, cb); }; Channel.prototype.deleteExchange = function(exchange, options, cb) { - return this.rpc(defs.ExchangeDelete, - Args.deleteExchange(exchange, options), - defs.ExchangeDeleteOk, cb); -}; - -Channel.prototype.bindExchange = - function(dest, source, pattern, argt, cb) { - return this.rpc(defs.ExchangeBind, - Args.bindExchange(dest, source, pattern, argt), - defs.ExchangeBindOk, cb); - }; - -Channel.prototype.unbindExchange = - function(dest, source, pattern, argt, cb) { - return this.rpc(defs.ExchangeUnbind, - Args.unbindExchange(dest, source, pattern, argt), - defs.ExchangeUnbindOk, cb); - }; - -Channel.prototype.publish = - function(exchange, routingKey, content, options) { - var fieldsAndProps = Args.publish(exchange, routingKey, options); - return this.sendMessage(fieldsAndProps, fieldsAndProps, content); - }; + return this.rpc(defs.ExchangeDelete, Args.deleteExchange(exchange, options), defs.ExchangeDeleteOk, cb); +}; + +Channel.prototype.bindExchange = function(dest, source, pattern, argt, cb) { + return this.rpc(defs.ExchangeBind, Args.bindExchange(dest, source, pattern, argt), defs.ExchangeBindOk, cb); +}; + +Channel.prototype.unbindExchange = function(dest, source, pattern, argt, cb) { + return this.rpc(defs.ExchangeUnbind, Args.unbindExchange(dest, source, pattern, argt), defs.ExchangeUnbindOk, cb); +}; + +Channel.prototype.publish = function(exchange, routingKey, content, options) { + var fieldsAndProps = Args.publish(exchange, routingKey, options); + return this.sendMessage(fieldsAndProps, fieldsAndProps, content); +}; Channel.prototype.sendToQueue = function(queue, content, options) { return this.publish('', queue, content, options); @@ -179,30 +156,24 @@ Channel.prototype.consume = function(queue, callback, options, cb0) { var cb = callbackWrapper(this, cb0); var fields = Args.consume(queue, options); var self = this; - this._rpc( - defs.BasicConsume, fields, defs.BasicConsumeOk, - function(err, ok) { - if (err === null) { - self.registerConsumer(ok.fields.consumerTag, callback); - cb(null, ok.fields); - } - else cb(err); - }); + this._rpc(defs.BasicConsume, fields, defs.BasicConsumeOk, function(err, ok) { + if (err === null) { + self.registerConsumer(ok.fields.consumerTag, callback); + cb(null, ok.fields); + } else cb(err); + }); return this; }; Channel.prototype.cancel = function(consumerTag, cb0) { var cb = callbackWrapper(this, cb0); var self = this; - this._rpc( - defs.BasicCancel, Args.cancel(consumerTag), defs.BasicCancelOk, - function(err, ok) { - if (err === null) { - self.unregisterConsumer(consumerTag); - cb(null, ok.fields); - } - else cb(err); - }); + this._rpc(defs.BasicCancel, Args.cancel(consumerTag), defs.BasicCancelOk, function(err, ok) { + if (err === null) { + self.unregisterConsumer(consumerTag); + cb(null, ok.fields); + } else cb(err); + }); return this; }; @@ -214,16 +185,13 @@ Channel.prototype.get = function(queue, options, cb0) { if (err === null) { if (f.id === defs.BasicGetEmpty) { cb(null, false); - } - else if (f.id === defs.BasicGetOk) { + } else if (f.id === defs.BasicGetOk) { self.handleMessage = acceptMessage(function(m) { m.fields = f.fields; cb(null, m); }); - } - else { - cb(new Error("Unexpected response to BasicGet: " + - inspect(f))); + } else { + cb(new Error('Unexpected response to BasicGet: ' + inspect(f))); } } }); @@ -231,8 +199,7 @@ Channel.prototype.get = function(queue, options, cb0) { }; Channel.prototype.ack = function(message, allUpTo) { - this.sendImmediately( - defs.BasicAck, Args.ack(message.fields.deliveryTag, allUpTo)); + this.sendImmediately(defs.BasicAck, Args.ack(message.fields.deliveryTag, allUpTo)); return this; }; @@ -242,35 +209,26 @@ Channel.prototype.ackAll = function() { }; Channel.prototype.nack = function(message, allUpTo, requeue) { - this.sendImmediately( - defs.BasicNack, - Args.nack(message.fields.deliveryTag, allUpTo, requeue)); + this.sendImmediately(defs.BasicNack, Args.nack(message.fields.deliveryTag, allUpTo, requeue)); return this; }; Channel.prototype.nackAll = function(requeue) { - this.sendImmediately( - defs.BasicNack, Args.nack(0, true, requeue)) + this.sendImmediately(defs.BasicNack, Args.nack(0, true, requeue)); return this; }; Channel.prototype.reject = function(message, requeue) { - this.sendImmediately( - defs.BasicReject, - Args.reject(message.fields.deliveryTag, requeue)); + this.sendImmediately(defs.BasicReject, Args.reject(message.fields.deliveryTag, requeue)); return this; }; Channel.prototype.prefetch = function(count, global, cb) { - return this.rpc(defs.BasicQos, - Args.prefetch(count, global), - defs.BasicQosOk, cb); + return this.rpc(defs.BasicQos, Args.prefetch(count, global), defs.BasicQosOk, cb); }; Channel.prototype.recover = function(cb) { - return this.rpc(defs.BasicRecover, - Args.recover(), - defs.BasicRecoverOk, cb); + return this.rpc(defs.BasicRecover, Args.recover(), defs.BasicRecoverOk, cb); }; function ConfirmChannel(connection) { @@ -285,25 +243,21 @@ CallbackModel.prototype.createConfirmChannel = function(cb) { ch.open(function(err) { if (err !== null) return cb && cb(err); else { - ch.rpc(defs.ConfirmSelect, {nowait: false}, - defs.ConfirmSelectOk, function(err, _ok) { - if (err !== null) return cb && cb(err); - else cb && cb(null, ch); - }); + ch.rpc(defs.ConfirmSelect, { nowait: false }, defs.ConfirmSelectOk, function(err, _ok) { + if (err !== null) return cb && cb(err); + else cb && cb(null, ch); + }); } }); return ch; }; -ConfirmChannel.prototype.publish = function(exchange, routingKey, - content, options, cb) { +ConfirmChannel.prototype.publish = function(exchange, routingKey, content, options, cb) { this.pushConfirmCallback(cb); - return Channel.prototype.publish.call( - this, exchange, routingKey, content, options); + return Channel.prototype.publish.call(this, exchange, routingKey, content, options); }; -ConfirmChannel.prototype.sendToQueue = function(queue, content, - options, cb) { +ConfirmChannel.prototype.sendToQueue = function(queue, content, options, cb) { return this.publish('', queue, content, options, cb); }; @@ -311,9 +265,10 @@ ConfirmChannel.prototype.waitForConfirms = function(k) { var awaiting = []; var unconfirmed = this.unconfirmed; unconfirmed.forEach(function(val, index) { - if (val === null); // already confirmed + if (val === null); else { - var confirmed = new Promise(function(resolve, reject) { + // already confirmed + var confirmed = new this.Promise(function(resolve, reject) { unconfirmed[index] = function(err) { if (val) val(err); if (err === null) resolve(); @@ -323,6 +278,12 @@ ConfirmChannel.prototype.waitForConfirms = function(k) { awaiting.push(confirmed); } }); - return Promise.all(awaiting).then(function() { k(); }, - function(err) { k(err); }); + return this.Promise.all(awaiting).then( + function() { + k(); + }, + function(err) { + k(err); + } + ); }; diff --git a/lib/channel.js b/lib/channel.js index fc8f17d6..2216a089 100644 --- a/lib/channel.js +++ b/lib/channel.js @@ -4,54 +4,61 @@ // Channel machinery. -'use strict'; - -var defs = require('./defs'); -var closeMsg = require('./format').closeMessage; -var inspect = require('./format').inspect; -var methodName = require('./format').methodName; -var assert = require('assert'); -var inherits = require('util').inherits; -var EventEmitter = require('events').EventEmitter; -var fmt = require('util').format; -var IllegalOperationError = require('./error').IllegalOperationError; -var stackCapture = require('./error').stackCapture; +'use strict' + +var defs = require('./defs') +var closeMsg = require('./format').closeMessage +var inspect = require('./format').inspect +var methodName = require('./format').methodName +var assert = require('assert') +var inherits = require('util').inherits +var EventEmitter = require('events').EventEmitter +var fmt = require('util').format +var IllegalOperationError = require('./error').IllegalOperationError +var stackCapture = require('./error').stackCapture var Buffer = require('safe-buffer').Buffer -function Channel(connection) { - EventEmitter.call( this ); - this.connection = connection; +function Channel(connection, options) { + EventEmitter.call(this) + this.Promise = options.Promise + this.connection = connection // for the presently outstanding RPC - this.reply = null; + this.reply = null // for the RPCs awaiting action - this.pending = []; + this.pending = [] // for unconfirmed messages - this.lwm = 1; // the least, unconfirmed deliveryTag - this.unconfirmed = []; // rolling window of delivery callbacks - this.on('ack', this.handleConfirm.bind(this, function(cb) { - if (cb) cb(null); - })); - this.on('nack', this.handleConfirm.bind(this, function(cb) { - if (cb) cb(new Error('message nacked')); - })); - this.on('close', function () { - var cb; - while (cb = this.unconfirmed.shift()) { - if (cb) cb(new Error('channel closed')); + this.lwm = 1 // the least, unconfirmed deliveryTag + this.unconfirmed = [] // rolling window of delivery callbacks + this.on( + 'ack', + this.handleConfirm.bind(this, function(cb) { + if (cb) cb(null) + }) + ) + this.on( + 'nack', + this.handleConfirm.bind(this, function(cb) { + if (cb) cb(new Error('message nacked')) + }) + ) + this.on('close', function() { + var cb + while ((cb = this.unconfirmed.shift())) { + if (cb) cb(new Error('channel closed')) } }) // message frame state machine - this.handleMessage = acceptDeliveryOrReturn; + this.handleMessage = acceptDeliveryOrReturn } -inherits(Channel, EventEmitter); +inherits(Channel, EventEmitter) -module.exports.Channel = Channel; -module.exports.acceptMessage = acceptMessage; +module.exports.Channel = Channel +module.exports.acceptMessage = acceptMessage -var C = Channel.prototype; +var C = Channel.prototype C.allocate = function() { - this.ch = this.connection.freshChannel(this); - return this; + this.ch = this.connection.freshChannel(this) + return this } // Incoming frames are either notifications of e.g., message delivery, @@ -67,80 +74,66 @@ C.allocate = function() { // Just send the damn frame. C.sendImmediately = function(method, fields) { - return this.connection.sendMethod(this.ch, method, fields); -}; + return this.connection.sendMethod(this.ch, method, fields) +} // Invariant: !this.reply -> pending.length == 0. That is, whenever we // clear a reply, we must send another RPC (and thereby fill // this.reply) if there is one waiting. The invariant relevant here // and in `accept`. C.sendOrEnqueue = function(method, fields, reply) { - if (!this.reply) { // if no reply waiting, we can go - assert(this.pending.length === 0); - this.reply = reply; - this.sendImmediately(method, fields); - } - else { - this.pending.push({method: method, - fields: fields, - reply: reply}); + if (!this.reply) { + // if no reply waiting, we can go + assert(this.pending.length === 0) + this.reply = reply + this.sendImmediately(method, fields) + } else { + this.pending.push({ method: method, fields: fields, reply: reply }) } -}; +} C.sendMessage = function(fields, properties, content) { - return this.connection.sendMessage( - this.ch, - defs.BasicPublish, fields, - defs.BasicProperties, properties, - content); -}; + return this.connection.sendMessage(this.ch, defs.BasicPublish, fields, defs.BasicProperties, properties, content) +} // Internal, synchronously resolved RPC; the return value is resolved // with the whole frame. C._rpc = function(method, fields, expect, cb) { - var self = this; + var self = this function reply(err, f) { if (err === null) { if (f.id === expect) { - return cb(null, f); - } - else { + return cb(null, f) + } else { // We have detected a problem, so it's up to us to close the // channel - var expectedName = methodName(expect); - - var e = new Error(fmt("Expected %s; got %s", - expectedName, inspect(f, false))); - self.closeWithError(f.id, fmt('Expected %s; got %s', - expectedName, methodName(f.id)), - defs.constants.UNEXPECTED_FRAME, e); - return cb(e); + var expectedName = methodName(expect) + + var e = new Error(fmt('Expected %s; got %s', expectedName, inspect(f, false))) + self.closeWithError(f.id, fmt('Expected %s; got %s', expectedName, methodName(f.id)), defs.constants.UNEXPECTED_FRAME, e) + return cb(e) } } // An error will be given if, for example, this is waiting to be // sent and the connection closes - else if (err instanceof Error) return cb(err); + else if (err instanceof Error) return cb(err) // A close frame will be given if this is the RPC awaiting reply // and the channel is closed by the server else { // otherwise, it's a close frame - var closeReason = - (err.fields.classId << 16) + err.fields.methodId; - var e = (method === closeReason) - ? fmt("Operation failed: %s; %s", - methodName(method), closeMsg(err)) - : fmt("Channel closed by server: %s", closeMsg(err)); - var closeFrameError = new Error(e); - closeFrameError.code = err.fields.replyCode; - closeFrameError.classId = err.fields.classId; - closeFrameError.methodId = err.fields.methodId; - return cb(closeFrameError); + var closeReason = (err.fields.classId << 16) + err.fields.methodId + var e = method === closeReason ? fmt('Operation failed: %s; %s', methodName(method), closeMsg(err)) : fmt('Channel closed by server: %s', closeMsg(err)) + var closeFrameError = new Error(e) + closeFrameError.code = err.fields.replyCode + closeFrameError.classId = err.fields.classId + closeFrameError.methodId = err.fields.methodId + return cb(closeFrameError) } } - this.sendOrEnqueue(method, fields, reply); -}; + this.sendOrEnqueue(method, fields, reply) +} // Shutdown protocol. There's three scenarios: // @@ -157,82 +150,81 @@ C._rpc = function(method, fields, expect, cb) { function invalidOp(msg, stack) { return function() { - throw new IllegalOperationError(msg, stack); - }; + throw new IllegalOperationError(msg, stack) + } } function invalidateSend(ch, msg, stack) { - ch.sendImmediately = ch.sendOrEnqueue = ch.sendMessage = - invalidOp(msg, stack); + ch.sendImmediately = ch.sendOrEnqueue = ch.sendMessage = invalidOp(msg, stack) } // Move to entirely closed state. C.toClosed = function(capturedStack) { - this._rejectPending(); - invalidateSend(this, 'Channel closed', capturedStack); - this.accept = invalidOp('Channel closed', capturedStack); - this.connection.releaseChannel(this.ch); - this.emit('close'); -}; + this._rejectPending() + invalidateSend(this, 'Channel closed', capturedStack) + this.accept = invalidOp('Channel closed', capturedStack) + this.connection.releaseChannel(this.ch) + this.emit('close') +} // Stop being able to send and receive methods and content. Used when // we close the channel. Invokes the continuation once the server has // acknowledged the close, but before the channel is moved to the // closed state. C.toClosing = function(capturedStack, k) { - var send = this.sendImmediately.bind(this); - invalidateSend(this, 'Channel closing', capturedStack); + var send = this.sendImmediately.bind(this) + invalidateSend(this, 'Channel closing', capturedStack) this.accept = function(f) { if (f.id === defs.ChannelCloseOk) { - if (k) k(); - var s = stackCapture('ChannelCloseOk frame received'); - this.toClosed(s); - } - else if (f.id === defs.ChannelClose) { - send(defs.ChannelCloseOk, {}); + if (k) k() + var s = stackCapture('ChannelCloseOk frame received') + this.toClosed(s) + } else if (f.id === defs.ChannelClose) { + send(defs.ChannelCloseOk, {}) } // else ignore frame - }; -}; + } +} C._rejectPending = function() { function rej(r) { - r(new Error("Channel ended, no reply will be forthcoming")); + r(new Error('Channel ended, no reply will be forthcoming')) } - if (this.reply !== null) rej(this.reply); - this.reply = null; + if (this.reply !== null) rej(this.reply) + this.reply = null - var discard; - while (discard = this.pending.shift()) rej(discard.reply); - this.pending = null; // so pushes will break -}; + var discard + while ((discard = this.pending.shift())) rej(discard.reply) + this.pending = null // so pushes will break +} C.closeBecause = function(reason, code, k) { this.sendImmediately(defs.ChannelClose, { replyText: reason, replyCode: code, - methodId:0, classId: 0 - }); - var s = stackCapture('closeBecause called: ' + reason); - this.toClosing(s, k); -}; + methodId: 0, + classId: 0 + }) + var s = stackCapture('closeBecause called: ' + reason) + this.toClosing(s, k) +} // If we close because there's been an error, we need to distinguish // between what we tell the server (`reason`) and what we report as // the cause in the client (`error`). C.closeWithError = function(id, reason, code, error) { - var self = this; + var self = this this.closeBecause(reason, code, function() { - error.code = code; + error.code = code // content frames and consumer errors do not provide a method a class/method ID if (id) { - error.classId = defs.info(id).classId; - error.methodId = defs.info(id).methodId; + error.classId = defs.info(id).classId + error.methodId = defs.info(id).methodId } - self.emit('error', error); - }); -}; + self.emit('error', error) + }) +} // A trampolining state machine for message frames on a channel. A // message arrives in at least two frames: first, a method announcing @@ -244,74 +236,65 @@ C.closeWithError = function(id, reason, code, error) { // optimisation C.acceptMessageFrame = function(f) { try { - this.handleMessage = this.handleMessage(f); - } - catch (msg) { + this.handleMessage = this.handleMessage(f) + } catch (msg) { if (typeof msg === 'string') { - this.closeWithError(f.id, msg, defs.constants.UNEXPECTED_FRAME, - new Error(msg)); - } - else if (msg instanceof Error) { - this.closeWithError(f.id, 'Error while processing message', - defs.constants.INTERNAL_ERROR, msg); - } - else { - this.closeWithError(f.id, 'Internal error while processing message', - defs.constants.INTERNAL_ERROR, - new Error(msg.toString())); + this.closeWithError(f.id, msg, defs.constants.UNEXPECTED_FRAME, new Error(msg)) + } else if (msg instanceof Error) { + this.closeWithError(f.id, 'Error while processing message', defs.constants.INTERNAL_ERROR, msg) + } else { + this.closeWithError(f.id, 'Internal error while processing message', defs.constants.INTERNAL_ERROR, new Error(msg.toString())) } } -}; +} // Kick off a message delivery given a BasicDeliver or BasicReturn // frame (BasicGet uses the RPC mechanism) function acceptDeliveryOrReturn(f) { - var event; - if (f.id === defs.BasicDeliver) event = 'delivery'; - else if (f.id === defs.BasicReturn) event = 'return'; - else throw fmt("Expected BasicDeliver or BasicReturn; got %s", - inspect(f)); - - var self = this; - var fields = f.fields; + var event + if (f.id === defs.BasicDeliver) event = 'delivery' + else if (f.id === defs.BasicReturn) event = 'return' + else throw fmt('Expected BasicDeliver or BasicReturn; got %s', inspect(f)) + + var self = this + var fields = f.fields return acceptMessage(function(message) { - message.fields = fields; - self.emit(event, message); - }); + message.fields = fields + self.emit(event, message) + }) } // Move to the state of waiting for message frames (headers, then // one or more content frames) function acceptMessage(continuation) { - var totalSize = 0, remaining = 0; - var buffers = null; + var totalSize = 0, + remaining = 0 + var buffers = null var message = { fields: null, properties: null, content: null - }; + } - return headers; + return headers // expect a headers frame function headers(f) { if (f.id === defs.BasicProperties) { - message.properties = f.fields; - totalSize = remaining = f.size; + message.properties = f.fields + totalSize = remaining = f.size // for zero-length messages, content frames aren't required. if (totalSize === 0) { - message.content = Buffer.alloc(0); - continuation(message); - return acceptDeliveryOrReturn; - } - else { - return content; + message.content = Buffer.alloc(0) + continuation(message) + return acceptDeliveryOrReturn + } else { + return content } - } - else { - throw "Expected headers frame after delivery"; + } else { + throw 'Expected headers frame after delivery' } } @@ -319,180 +302,168 @@ function acceptMessage(continuation) { // %%% TODO cancelled messages (sent as zero-length content frame) function content(f) { if (f.content) { - var size = f.content.length; - remaining -= size; + var size = f.content.length + remaining -= size if (remaining === 0) { if (buffers !== null) { - buffers.push(f.content); - message.content = Buffer.concat(buffers); + buffers.push(f.content) + message.content = Buffer.concat(buffers) + } else { + message.content = f.content } - else { - message.content = f.content; - } - continuation(message); - return acceptDeliveryOrReturn; - } - else if (remaining < 0) { - throw fmt("Too much content sent! Expected %d bytes", - totalSize); + continuation(message) + return acceptDeliveryOrReturn + } else if (remaining < 0) { + throw fmt('Too much content sent! Expected %d bytes', totalSize) + } else { + if (buffers !== null) buffers.push(f.content) + else buffers = [f.content] + return content } - else { - if (buffers !== null) - buffers.push(f.content); - else - buffers = [f.content]; - return content; - } - } - else throw "Expected content frame after headers" + } else throw 'Expected content frame after headers' } } C.handleConfirm = function(handle, f) { - var tag = f.deliveryTag; - var multi = f.multiple; + var tag = f.deliveryTag + var multi = f.multiple if (multi) { - var confirmed = this.unconfirmed.splice(0, tag - this.lwm + 1); - this.lwm = tag + 1; - confirmed.forEach(handle); - } - else { - var c; + var confirmed = this.unconfirmed.splice(0, tag - this.lwm + 1) + this.lwm = tag + 1 + confirmed.forEach(handle) + } else { + var c if (tag === this.lwm) { - c = this.unconfirmed.shift(); - this.lwm++; + c = this.unconfirmed.shift() + this.lwm++ // Advance the LWM and the window to the next non-gap, or // possibly to the end while (this.unconfirmed[0] === null) { - this.unconfirmed.shift(); - this.lwm++; + this.unconfirmed.shift() + this.lwm++ } - } - else { - c = this.unconfirmed[tag - this.lwm]; - this.unconfirmed[tag - this.lwm] = null; + } else { + c = this.unconfirmed[tag - this.lwm] + this.unconfirmed[tag - this.lwm] = null } // Technically, in the single-deliveryTag case, I should report a // protocol breach if it's already been confirmed. - handle(c); + handle(c) } -}; +} C.pushConfirmCallback = function(cb) { // `null` is used specifically for marking already confirmed slots, // so I coerce `undefined` and `null` to false; functions are never // falsey. - this.unconfirmed.push(cb || false); -}; + this.unconfirmed.push(cb || false) +} // Interface for connection to use C.accept = function(f) { - switch (f.id) { - // Message frames - case undefined: // content frame! - case defs.BasicDeliver: - case defs.BasicReturn: - case defs.BasicProperties: - return this.acceptMessageFrame(f); + case undefined: // content frame! + case defs.BasicDeliver: + case defs.BasicReturn: + case defs.BasicProperties: + return this.acceptMessageFrame(f) // confirmations, need to do confirm.select first - case defs.BasicAck: - return this.emit('ack', f.fields); - case defs.BasicNack: - return this.emit('nack', f.fields); - case defs.BasicCancel: - // The broker can send this if e.g., the queue is deleted. - return this.emit('cancel', f.fields); - - case defs.ChannelClose: - // Any remote closure is an error to us. Reject the pending reply - // with the close frame, so it can see whether it was that - // operation that caused it to close. - if (this.reply) { - var reply = this.reply; this.reply = null; - reply(f); - } - var emsg = "Channel closed by server: " + closeMsg(f); - this.sendImmediately(defs.ChannelCloseOk, {}); - - var error = new Error(emsg); - error.code = f.fields.replyCode; - error.classId = f.fields.classId; - error.methodId = f.fields.methodId; - this.emit('error', error); - - var s = stackCapture(emsg); - this.toClosed(s); - return; - - case defs.BasicFlow: - // RabbitMQ doesn't send this, it just blocks the TCP socket - return this.closeWithError(f.id, "Flow not implemented", - defs.constants.NOT_IMPLEMENTED, - new Error('Flow not implemented')); - - default: // assume all other things are replies - // Resolving the reply may lead to another RPC; to make sure we - // don't hold that up, clear this.reply - var reply = this.reply; this.reply = null; - // however, maybe there's an RPC waiting to go? If so, that'll - // fill this.reply again, restoring the invariant. This does rely - // on any response being recv'ed after resolving the promise, - // below; hence, I use synchronous defer. - if (this.pending.length > 0) { - var send = this.pending.shift(); - this.reply = send.reply; - this.sendImmediately(send.method, send.fields); - } - return reply(null, f); + case defs.BasicAck: + return this.emit('ack', f.fields) + case defs.BasicNack: + return this.emit('nack', f.fields) + case defs.BasicCancel: + // The broker can send this if e.g., the queue is deleted. + return this.emit('cancel', f.fields) + + case defs.ChannelClose: + // Any remote closure is an error to us. Reject the pending reply + // with the close frame, so it can see whether it was that + // operation that caused it to close. + if (this.reply) { + var reply = this.reply + this.reply = null + reply(f) + } + var emsg = 'Channel closed by server: ' + closeMsg(f) + this.sendImmediately(defs.ChannelCloseOk, {}) + + var error = new Error(emsg) + error.code = f.fields.replyCode + error.classId = f.fields.classId + error.methodId = f.fields.methodId + this.emit('error', error) + + var s = stackCapture(emsg) + this.toClosed(s) + return + + case defs.BasicFlow: + // RabbitMQ doesn't send this, it just blocks the TCP socket + return this.closeWithError(f.id, 'Flow not implemented', defs.constants.NOT_IMPLEMENTED, new Error('Flow not implemented')) + + default: + // assume all other things are replies + // Resolving the reply may lead to another RPC; to make sure we + // don't hold that up, clear this.reply + var reply = this.reply + this.reply = null + // however, maybe there's an RPC waiting to go? If so, that'll + // fill this.reply again, restoring the invariant. This does rely + // on any response being recv'ed after resolving the promise, + // below; hence, I use synchronous defer. + if (this.pending.length > 0) { + var send = this.pending.shift() + this.reply = send.reply + this.sendImmediately(send.method, send.fields) + } + return reply(null, f) } -}; +} C.onBufferDrain = function() { - this.emit('drain'); -}; - + this.emit('drain') +} // This adds just a bit more stuff useful for the APIs, but not // low-level machinery. -function BaseChannel(connection) { - Channel.call(this, connection); - this.consumers = {}; +function BaseChannel(connection, options) { + Channel.call(this, connection, options) + this.consumers = {} } -inherits(BaseChannel, Channel); +inherits(BaseChannel, Channel) -module.exports.BaseChannel = BaseChannel; +module.exports.BaseChannel = BaseChannel // Not sure I like the ff, it's going to be changing hidden classes // all over the place. On the other hand, whaddya do. BaseChannel.prototype.registerConsumer = function(tag, callback) { - this.consumers[tag] = callback; -}; + this.consumers[tag] = callback +} BaseChannel.prototype.unregisterConsumer = function(tag) { - delete this.consumers[tag]; -}; + delete this.consumers[tag] +} BaseChannel.prototype.dispatchMessage = function(fields, message) { - var consumerTag = fields.consumerTag; - var consumer = this.consumers[consumerTag]; + var consumerTag = fields.consumerTag + var consumer = this.consumers[consumerTag] if (consumer) { - return consumer(message); - } - else { + return consumer(message) + } else { // %%% Surely a race here - throw new Error("Unknown consumer: " + consumerTag); + throw new Error('Unknown consumer: ' + consumerTag) } -}; +} BaseChannel.prototype.handleDelivery = function(message) { - return this.dispatchMessage(message.fields, message); -}; + return this.dispatchMessage(message.fields, message) +} BaseChannel.prototype.handleCancel = function(fields) { - return this.dispatchMessage(fields, null); -}; + return this.dispatchMessage(fields, null) +} diff --git a/lib/channel_model.js b/lib/channel_model.js index 2097fd14..78e6685a 100644 --- a/lib/channel_model.js +++ b/lib/channel_model.js @@ -5,18 +5,17 @@ 'use strict'; var defs = require('./defs'); -var Promise = require('bluebird'); var inherits = require('util').inherits; var EventEmitter = require('events').EventEmitter; var BaseChannel = require('./channel').BaseChannel; var acceptMessage = require('./channel').acceptMessage; var Args = require('./api_args'); -function ChannelModel(connection) { - if (!(this instanceof ChannelModel)) - return new ChannelModel(connection); - EventEmitter.call( this ); +function ChannelModel(connection, options) { + if (!(this instanceof ChannelModel)) return new ChannelModel(connection); + EventEmitter.call(this); this.connection = connection; + this.Promise = options.Promise; var self = this; ['error', 'close', 'blocked', 'unblocked'].forEach(function(ev) { connection.on(ev, self.emit.bind(self, ev)); @@ -29,13 +28,22 @@ module.exports.ChannelModel = ChannelModel; var CM = ChannelModel.prototype; CM.close = function() { - return Promise.fromCallback(this.connection.close.bind(this.connection)); + var close = this.connection.close.bind(this.connection); + return new this.Promise(function(resolve, reject) { + close(function(err, result) { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); }; // Channels -function Channel(connection) { - BaseChannel.call(this, connection); +function Channel(connection, options) { + BaseChannel.call(this, connection, options); this.on('delivery', this.handleDelivery.bind(this)); this.on('cancel', this.handleCancel.bind(this)); } @@ -44,8 +52,11 @@ inherits(Channel, BaseChannel); module.exports.Channel = Channel; CM.createChannel = function() { - var c = new Channel(this.connection); - return c.open().then(function(openOk) { return c; }); + var options = { Promise: this.Promise }; + var c = new Channel(this.connection, options); + return c.open().then(function(openOk) { + return c; + }); }; var C = Channel.prototype; @@ -55,100 +66,93 @@ var C = Channel.prototype; // API procedures. C.rpc = function(method, fields, expect) { var self = this; - return Promise.fromCallback(function(cb) { - return self._rpc(method, fields, expect, cb); - }) - .then(function(f) { + return new this.Promise(function(resolve, reject) { + self._rpc(method, fields, expect, function(err, result) { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }).then(function(f) { return f.fields; }); }; // Do the remarkably simple channel open handshake C.open = function() { - return Promise.try(this.allocate.bind(this)).then( - function(ch) { - return ch.rpc(defs.ChannelOpen, {outOfBand: ""}, - defs.ChannelOpenOk); - }); + var allocate = this.allocate.bind(this); + return new this.Promise(function(resolve) { + resolve(allocate()); + }).then(function(ch) { + return ch.rpc(defs.ChannelOpen, { outOfBand: '' }, defs.ChannelOpenOk); + }); + // return Promise.try(this.allocate.bind(this)).then(function(ch) { + // return ch.rpc(defs.ChannelOpen, { outOfBand: '' }, defs.ChannelOpenOk) + // }) }; C.close = function() { var self = this; - return Promise.fromCallback(function(cb) { - return self.closeBecause("Goodbye", defs.constants.REPLY_SUCCESS, - cb); + return new this.Promise(function(resolve, reject) { + self.closeBecause('Goodbye', defs.constants.REPLY_SUCCESS, function(err, result) { + if (err) { + reject(err); + } else { + resolve(result); + } + }); }); }; // === Public API, declaring queues and stuff === C.assertQueue = function(queue, options) { - return this.rpc(defs.QueueDeclare, - Args.assertQueue(queue, options), - defs.QueueDeclareOk); + return this.rpc(defs.QueueDeclare, Args.assertQueue(queue, options), defs.QueueDeclareOk); }; C.checkQueue = function(queue) { - return this.rpc(defs.QueueDeclare, - Args.checkQueue(queue), - defs.QueueDeclareOk); + return this.rpc(defs.QueueDeclare, Args.checkQueue(queue), defs.QueueDeclareOk); }; C.deleteQueue = function(queue, options) { - return this.rpc(defs.QueueDelete, - Args.deleteQueue(queue, options), - defs.QueueDeleteOk); + return this.rpc(defs.QueueDelete, Args.deleteQueue(queue, options), defs.QueueDeleteOk); }; C.purgeQueue = function(queue) { - return this.rpc(defs.QueuePurge, - Args.purgeQueue(queue), - defs.QueuePurgeOk); + return this.rpc(defs.QueuePurge, Args.purgeQueue(queue), defs.QueuePurgeOk); }; C.bindQueue = function(queue, source, pattern, argt) { - return this.rpc(defs.QueueBind, - Args.bindQueue(queue, source, pattern, argt), - defs.QueueBindOk); + return this.rpc(defs.QueueBind, Args.bindQueue(queue, source, pattern, argt), defs.QueueBindOk); }; C.unbindQueue = function(queue, source, pattern, argt) { - return this.rpc(defs.QueueUnbind, - Args.unbindQueue(queue, source, pattern, argt), - defs.QueueUnbindOk); + return this.rpc(defs.QueueUnbind, Args.unbindQueue(queue, source, pattern, argt), defs.QueueUnbindOk); }; C.assertExchange = function(exchange, type, options) { // The server reply is an empty set of fields, but it's convenient // to have the exchange name handed to the continuation. - return this.rpc(defs.ExchangeDeclare, - Args.assertExchange(exchange, type, options), - defs.ExchangeDeclareOk) - .then(function(_ok) { return { exchange: exchange }; }); + return this.rpc(defs.ExchangeDeclare, Args.assertExchange(exchange, type, options), defs.ExchangeDeclareOk).then(function(_ok) { + return { exchange: exchange }; + }); }; C.checkExchange = function(exchange) { - return this.rpc(defs.ExchangeDeclare, - Args.checkExchange(exchange), - defs.ExchangeDeclareOk); + return this.rpc(defs.ExchangeDeclare, Args.checkExchange(exchange), defs.ExchangeDeclareOk); }; C.deleteExchange = function(name, options) { - return this.rpc(defs.ExchangeDelete, - Args.deleteExchange(name, options), - defs.ExchangeDeleteOk); + return this.rpc(defs.ExchangeDelete, Args.deleteExchange(name, options), defs.ExchangeDeleteOk); }; C.bindExchange = function(dest, source, pattern, argt) { - return this.rpc(defs.ExchangeBind, - Args.bindExchange(dest, source, pattern, argt), - defs.ExchangeBindOk); + return this.rpc(defs.ExchangeBind, Args.bindExchange(dest, source, pattern, argt), defs.ExchangeBindOk); }; C.unbindExchange = function(dest, source, pattern, argt) { - return this.rpc(defs.ExchangeUnbind, - Args.unbindExchange(dest, source, pattern, argt), - defs.ExchangeUnbindOk); + return this.rpc(defs.ExchangeUnbind, Args.unbindExchange(dest, source, pattern, argt), defs.ExchangeUnbindOk); }; // Working with messages @@ -167,10 +171,15 @@ C.consume = function(queue, callback, options) { // NB we want the callback to be run synchronously, so that we've // registered the consumerTag before any messages can arrive. var fields = Args.consume(queue, options); - return Promise.fromCallback(function(cb) { - self._rpc(defs.BasicConsume, fields, defs.BasicConsumeOk, cb); - }) - .then(function(ok) { + return new this.Promise(function(resolve, reject) { + self._rpc(defs.BasicConsume, fields, defs.BasicConsumeOk, function(err, result) { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }).then(function(ok) { self.registerConsumer(ok.fields.consumerTag, callback); return ok.fields; }); @@ -178,12 +187,15 @@ C.consume = function(queue, callback, options) { C.cancel = function(consumerTag) { var self = this; - return Promise.fromCallback(function(cb) { - self._rpc(defs.BasicCancel, Args.cancel(consumerTag), - defs.BasicCancelOk, - cb); - }) - .then(function(ok) { + return new this.Promise(function(resolve, reject) { + self._rpc(defs.BasicCancel, Args.cancel(consumerTag), defs.BasicCancelOk, function(err, result) { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }).then(function(ok) { self.unregisterConsumer(consumerTag); return ok.fields; }); @@ -192,33 +204,33 @@ C.cancel = function(consumerTag) { C.get = function(queue, options) { var self = this; var fields = Args.get(queue, options); - return Promise.fromCallback(function(cb) { - return self.sendOrEnqueue(defs.BasicGet, fields, cb); - }) - .then(function(f) { + return new this.Promise(function(resolve, reject) { + self.sendOrEnqueue(defs.BasicGet, fields, function(err, result) { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }).then(function(f) { if (f.id === defs.BasicGetEmpty) { return false; - } - else if (f.id === defs.BasicGetOk) { + } else if (f.id === defs.BasicGetOk) { var fields = f.fields; - return new Promise(function(resolve) { + return new this.Promise(function(resolve) { self.handleMessage = acceptMessage(function(m) { m.fields = fields; resolve(m); }); }); + } else { + throw new Error('Unexpected response to BasicGet: ' + inspect(f)); } - else { - throw new Error("Unexpected response to BasicGet: " + - inspect(f)); - } - }) + }); }; C.ack = function(message, allUpTo) { - this.sendImmediately( - defs.BasicAck, - Args.ack(message.fields.deliveryTag, allUpTo)); + this.sendImmediately(defs.BasicAck, Args.ack(message.fields.deliveryTag, allUpTo)); }; C.ackAll = function() { @@ -226,14 +238,11 @@ C.ackAll = function() { }; C.nack = function(message, allUpTo, requeue) { - this.sendImmediately( - defs.BasicNack, - Args.nack(message.fields.deliveryTag, allUpTo, requeue)); + this.sendImmediately(defs.BasicNack, Args.nack(message.fields.deliveryTag, allUpTo, requeue)); }; C.nackAll = function(requeue) { - this.sendImmediately(defs.BasicNack, - Args.nack(0, true, requeue)); + this.sendImmediately(defs.BasicNack, Args.nack(0, true, requeue)); }; // `Basic.Nack` is not available in older RabbitMQ versions (or in the @@ -241,9 +250,7 @@ C.nackAll = function(requeue) { // `Basic.Reject`. This is otherwise synonymous with // `#nack(message, false, requeue)`. C.reject = function(message, requeue) { - this.sendImmediately( - defs.BasicReject, - Args.reject(message.fields.deliveryTag, requeue)); + this.sendImmediately(defs.BasicReject, Args.reject(message.fields.deliveryTag, requeue)); }; // There are more options in AMQP than exposed here; RabbitMQ only @@ -252,15 +259,11 @@ C.reject = function(message, requeue) { // (without `global` set) as per-consumer (for consumers following), // and prefetch with `global` set as per-channel. C.prefetch = C.qos = function(count, global) { - return this.rpc(defs.BasicQos, - Args.prefetch(count, global), - defs.BasicQosOk); + return this.rpc(defs.BasicQos, Args.prefetch(count, global), defs.BasicQosOk); }; C.recover = function() { - return this.rpc(defs.BasicRecover, - Args.recover(), - defs.BasicRecoverOk); + return this.rpc(defs.BasicRecover, Args.recover(), defs.BasicRecoverOk); }; // Confirm channel. This is a channel with confirms 'switched on', @@ -279,12 +282,14 @@ module.exports.ConfirmChannel = ConfirmChannel; CM.createConfirmChannel = function() { var c = new ConfirmChannel(this.connection); - return c.open() + return c + .open() .then(function(openOk) { - return c.rpc(defs.ConfirmSelect, {nowait: false}, - defs.ConfirmSelectOk) + return c.rpc(defs.ConfirmSelect, { nowait: false }, defs.ConfirmSelectOk); }) - .then(function() { return c; }); + .then(function() { + return c; + }); }; var CC = ConfirmChannel.prototype; @@ -302,9 +307,10 @@ CC.waitForConfirms = function() { var awaiting = []; var unconfirmed = this.unconfirmed; unconfirmed.forEach(function(val, index) { - if (val === null); // already confirmed + if (val === null); else { - var confirmed = new Promise(function(resolve, reject) { + // already confirmed + var confirmed = new this.Promise(function(resolve, reject) { unconfirmed[index] = function(err) { if (val) val(err); if (err === null) resolve(); @@ -314,5 +320,5 @@ CC.waitForConfirms = function() { awaiting.push(confirmed); } }); - return Promise.all(awaiting); + return this.Promise.all(awaiting); }; diff --git a/pnpm-debug.log b/pnpm-debug.log new file mode 100644 index 00000000..2b5e56bd --- /dev/null +++ b/pnpm-debug.log @@ -0,0 +1,22 @@ +{ + "0 debug pnpm:scope": { + "selected": 1, + "workspacePrefix": null + }, + "1 error pnpm": { + "message": { + "errno": 2, + "code": "ELIFECYCLE", + "pkgid": "amqplib@0.5.5", + "stage": "test", + "script": "make test", + "pkgname": "amqplib" + }, + "err": { + "name": "Error", + "message": "amqplib@0.5.5 test: `make test`\nExit status 2", + "code": "ELIFECYCLE", + "stack": "Error: amqplib@0.5.5 test: `make test`\nExit status 2\n at EventEmitter. (/home/jeremyc/.nvm/versions/node/v12.9.0/lib/node_modules/pnpm/lib/node_modules/@zkochan/npm-lifecycle/index.js:302:16)\n at EventEmitter.emit (events.js:209:13)\n at ChildProcess. (/home/jeremyc/.nvm/versions/node/v12.9.0/lib/node_modules/pnpm/lib/node_modules/@zkochan/npm-lifecycle/lib/spawn.js:55:14)\n at ChildProcess.emit (events.js:209:13)\n at maybeClose (internal/child_process.js:1021:16)\n at Process.ChildProcess._handle.onexit (internal/child_process.js:283:5)" + } + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..1642237f --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,607 @@ +dependencies: + bitsyntax: 0.1.0 + bluebird: 3.7.0 + buffer-more-ints: 1.0.0 + readable-stream: 1.1.14 + safe-buffer: 5.1.2 + url-parse: 1.4.7 +devDependencies: + claire: 0.4.1 + istanbul: 0.1.46 + mocha: 3.5.3 + uglify-js: 2.6.4 +lockfileVersion: 5.1 +packages: + /abbrev/1.0.9: + dev: true + resolution: + integrity: sha1-kbR5JYinc4wl813W9jdSovh3YTU= + /abbrev/1.1.1: + dev: true + resolution: + integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + /align-text/0.1.4: + dependencies: + kind-of: 3.2.2 + longest: 1.0.1 + repeat-string: 1.6.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + /amdefine/1.0.1: + dev: true + engines: + node: '>=0.4.2' + resolution: + integrity: sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + /async/0.2.10: + dev: true + resolution: + integrity: sha1-trvgsGdLnXGXCMo43owjfLUmw9E= + /balanced-match/1.0.0: + dev: true + resolution: + integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + /bitsyntax/0.1.0: + dependencies: + buffer-more-ints: 1.0.0 + debug: 2.6.9 + safe-buffer: 5.1.2 + dev: false + engines: + node: '>=0.8' + resolution: + integrity: sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== + /bluebird/3.7.0: + dev: false + resolution: + integrity: sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg== + /boo/1.2.4: + dev: true + resolution: + integrity: sha1-szMxw2xK552C9P0ORJBgTLfFE7U= + /brace-expansion/1.1.11: + dependencies: + balanced-match: 1.0.0 + concat-map: 0.0.1 + dev: true + resolution: + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /browser-stdout/1.3.0: + dev: true + resolution: + integrity: sha1-81HTKWnTL6XXpVZxVCY9korjvR8= + /buffer-more-ints/1.0.0: + dev: false + resolution: + integrity: sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== + /camelcase/1.2.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + /center-align/0.1.3: + dependencies: + align-text: 0.1.4 + lazy-cache: 1.0.4 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + /claire/0.4.1: + dependencies: + boo: 1.2.4 + flaw: 0.1.0 + prelude-ls: 0.6.0 + dev: true + resolution: + integrity: sha1-ynDcEmHd2PJaGvq604BcOfziY7w= + /cliui/2.1.0: + dependencies: + center-align: 0.1.3 + right-align: 0.1.3 + wordwrap: 0.0.2 + dev: true + resolution: + integrity: sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + /commander/2.9.0: + dependencies: + graceful-readlink: 1.0.1 + dev: true + engines: + node: '>= 0.6.x' + resolution: + integrity: sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= + /concat-map/0.0.1: + dev: true + resolution: + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /core-util-is/1.0.2: + dev: false + resolution: + integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + /debug/2.6.8: + dependencies: + ms: 2.0.0 + dev: true + resolution: + integrity: sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw= + /debug/2.6.9: + dependencies: + ms: 2.0.0 + dev: false + resolution: + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /decamelize/1.2.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + /diff/3.2.0: + dev: true + engines: + node: '>=0.3.1' + resolution: + integrity: sha1-yc45Okt8vQsFinJck98pkCeGj/k= + /escape-string-regexp/1.0.5: + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + /escodegen/0.0.23: + dependencies: + esprima: 1.0.4 + estraverse: 0.0.4 + dev: true + engines: + node: '>=0.4.0' + hasBin: true + optionalDependencies: + source-map: 0.7.3 + resolution: + integrity: sha1-ms+XgWQ2jkInZXHxiDnII7OoRN8= + /esprima/1.0.4: + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= + /estraverse/0.0.4: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI= + /fileset/0.1.8: + dependencies: + glob: 3.2.11 + minimatch: 0.4.0 + dev: true + resolution: + integrity: sha1-UGuRqTluqn4y+0KoQHfHoMc2t0E= + /flaw/0.1.0: + dev: true + resolution: + integrity: sha1-wMPo+BYWdTh+2tofbOhNZ5sCUn8= + /fs.realpath/1.0.0: + dev: true + resolution: + integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /glob/3.2.11: + dependencies: + inherits: 2.0.4 + minimatch: 0.3.0 + dev: true + resolution: + integrity: sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0= + /glob/7.1.1: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + resolution: + integrity: sha1-gFIR3wT6rxxjo2ADBs31reULLsg= + /graceful-readlink/1.0.1: + dev: true + resolution: + integrity: sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + /growl/1.9.2: + dev: true + resolution: + integrity: sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= + /handlebars/1.0.12: + dependencies: + optimist: 0.3.7 + uglify-js: 2.3.6 + dev: true + engines: + node: '>=0.4.7' + hasBin: true + resolution: + integrity: sha1-GMbTRAw16RsZs/9YK5FRq0mF1Pw= + /has-flag/1.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + /he/1.1.1: + dev: true + hasBin: true + resolution: + integrity: sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.4: + resolution: + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /is-buffer/1.1.6: + dev: true + resolution: + integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + /isarray/0.0.1: + dev: false + resolution: + integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + /istanbul/0.1.46: + dependencies: + abbrev: 1.0.9 + async: 0.2.10 + escodegen: 0.0.23 + esprima: 1.0.4 + fileset: 0.1.8 + handlebars: 1.0.12 + mkdirp: 0.3.5 + nopt: 2.1.2 + resolve: 0.5.1 + which: 1.0.9 + wordwrap: 0.0.3 + deprecated: |- + This module is no longer maintained, try this instead: + npm i nyc + Visit https://istanbul.js.org/integrations for other alternatives. + dev: true + hasBin: true + resolution: + integrity: sha1-zv6xx4fRJabbI70PY7Drk5CwtA0= + /json3/3.3.2: + deprecated: Please use the native JSON object instead of JSON 3 + dev: true + resolution: + integrity: sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= + /kind-of/3.2.2: + dependencies: + is-buffer: 1.1.6 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + /lazy-cache/1.0.4: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-odePw6UEdMuAhF07O24dpJpEbo4= + /lodash._baseassign/3.2.0: + dependencies: + lodash._basecopy: 3.0.1 + lodash.keys: 3.1.2 + dev: true + resolution: + integrity: sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= + /lodash._basecopy/3.0.1: + dev: true + resolution: + integrity: sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= + /lodash._basecreate/3.0.3: + dev: true + resolution: + integrity: sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE= + /lodash._getnative/3.9.1: + dev: true + resolution: + integrity: sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + /lodash._isiterateecall/3.0.9: + dev: true + resolution: + integrity: sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= + /lodash.create/3.1.1: + dependencies: + lodash._baseassign: 3.2.0 + lodash._basecreate: 3.0.3 + lodash._isiterateecall: 3.0.9 + dev: true + resolution: + integrity: sha1-1/KEnw29p+BGgruM1yqwIkYd6+c= + /lodash.isarguments/3.1.0: + dev: true + resolution: + integrity: sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= + /lodash.isarray/3.0.4: + dev: true + resolution: + integrity: sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= + /lodash.keys/3.1.2: + dependencies: + lodash._getnative: 3.9.1 + lodash.isarguments: 3.1.0 + lodash.isarray: 3.0.4 + dev: true + resolution: + integrity: sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= + /longest/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + /lru-cache/2.7.3: + dev: true + resolution: + integrity: sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= + /minimatch/0.3.0: + dependencies: + lru-cache: 2.7.3 + sigmund: 1.0.1 + deprecated: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue + dev: true + resolution: + integrity: sha1-J12O2qxPG7MyZHIInnlJyDlGmd0= + /minimatch/0.4.0: + dependencies: + lru-cache: 2.7.3 + sigmund: 1.0.1 + deprecated: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue + dev: true + resolution: + integrity: sha1-vSx9Bg0sjI/Xzefx8u0tWycP2xs= + /minimatch/3.0.4: + dependencies: + brace-expansion: 1.1.11 + dev: true + resolution: + integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /minimist/0.0.8: + dev: true + resolution: + integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + /mkdirp/0.3.5: + dev: true + resolution: + integrity: sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= + /mkdirp/0.5.1: + dependencies: + minimist: 0.0.8 + dev: true + hasBin: true + resolution: + integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + /mocha/3.5.3: + dependencies: + browser-stdout: 1.3.0 + commander: 2.9.0 + debug: 2.6.8 + diff: 3.2.0 + escape-string-regexp: 1.0.5 + glob: 7.1.1 + growl: 1.9.2 + he: 1.1.1 + json3: 3.3.2 + lodash.create: 3.1.1 + mkdirp: 0.5.1 + supports-color: 3.1.2 + dev: true + engines: + node: '>= 0.10.x' + npm: '>= 1.4.x' + hasBin: true + resolution: + integrity: sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg== + /ms/2.0.0: + resolution: + integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + /nopt/2.1.2: + dependencies: + abbrev: 1.1.1 + dev: true + hasBin: true + resolution: + integrity: sha1-bMzZd7gBMqB3MdbozljCyDA8+a8= + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /optimist/0.3.7: + dependencies: + wordwrap: 0.0.3 + dev: true + resolution: + integrity: sha1-yQlBrVnkJzMokjB00s8ufLxuwNk= + /path-is-absolute/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /prelude-ls/0.6.0: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-z4JLS0fMc8vZb56YhQc7Q6rqqzs= + /querystringify/2.1.1: + dev: false + resolution: + integrity: sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + /readable-stream/1.1.14: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + resolution: + integrity: sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + /repeat-string/1.6.1: + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc= + /requires-port/1.0.0: + dev: false + resolution: + integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + /resolve/0.5.1: + dev: true + resolution: + integrity: sha1-FeSiIsQja81M+FRUQSwtD7ZSRXY= + /right-align/0.1.3: + dependencies: + align-text: 0.1.4 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + /safe-buffer/5.1.2: + dev: false + resolution: + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + /sigmund/1.0.1: + dev: true + resolution: + integrity: sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= + /source-map/0.1.43: + dependencies: + amdefine: 1.0.1 + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= + /source-map/0.5.7: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + /source-map/0.7.3: + dev: true + engines: + node: '>= 8' + optional: true + resolution: + integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + /string_decoder/0.10.31: + dev: false + resolution: + integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + /supports-color/3.1.2: + dependencies: + has-flag: 1.0.0 + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-cqJiiU2dQIuVbKBf83su2KbiotU= + /uglify-js/2.3.6: + dependencies: + async: 0.2.10 + optimist: 0.3.7 + source-map: 0.1.43 + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo= + /uglify-js/2.6.4: + dependencies: + async: 0.2.10 + source-map: 0.5.7 + uglify-to-browserify: 1.0.2 + yargs: 3.10.0 + dev: true + engines: + node: '>=0.8.0' + hasBin: true + resolution: + integrity: sha1-ZeovswWck5RpLxX+2HwrNsFrmt8= + /uglify-to-browserify/1.0.2: + dev: true + resolution: + integrity: sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + /url-parse/1.4.7: + dependencies: + querystringify: 2.1.1 + requires-port: 1.0.0 + dev: false + resolution: + integrity: sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + /which/1.0.9: + dev: true + hasBin: true + resolution: + integrity: sha1-RgwdoPgQED0DIam2M6+eV15kSG8= + /window-size/0.1.0: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + /wordwrap/0.0.2: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + /wordwrap/0.0.3: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + /wrappy/1.0.2: + dev: true + resolution: + integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /yargs/3.10.0: + dependencies: + camelcase: 1.2.1 + cliui: 2.1.0 + decamelize: 1.2.0 + window-size: 0.1.0 + dev: true + resolution: + integrity: sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= +specifiers: + bitsyntax: ~0.1.0 + bluebird: ^3.5.2 + buffer-more-ints: ~1.0.0 + claire: 0.4.1 + istanbul: 0.1.x + mocha: ^3.5.3 + readable-stream: 1.x >=1.1.9 + safe-buffer: ~5.1.2 + uglify-js: 2.6.x + url-parse: ~1.4.3 diff --git a/test/channel.js b/test/channel.js index 072c3354..fb4e718b 100644 --- a/test/channel.js +++ b/test/channel.js @@ -7,7 +7,9 @@ var Promise = require('bluebird'); var Channel = require('../lib/channel').Channel; var Connection = require('../lib/connection').Connection; var util = require('./util'); -var succeed = util.succeed, fail = util.fail, latch = util.latch; +var succeed = util.succeed, + fail = util.fail, + latch = util.latch; var completes = util.completes; var defs = require('../lib/defs'); var conn_handshake = require('./connection').connection_handshake; @@ -31,10 +33,9 @@ function baseChannelTest(client, server) { pair.server.read(8); // discard the protocol header var s = util.runServer(pair.server, function(send, wait) { - conn_handshake(send, wait) - .then(function() { - server(send, wait, bothDone); - }, fail(bothDone)); + conn_handshake(send, wait).then(function() { + server(send, wait, bothDone); + }, fail(bothDone)); }); }; } @@ -48,21 +49,21 @@ function channelTest(client, server) { }, function(send, wait, done) { channel_handshake(send, wait) - .then(function(ch) { - return server(send, wait, done, ch); - }).then(null, fail(done)); // so you can return a promise to let - // errors bubble out + .then(function(ch) { + return server(send, wait, done, ch); + }) + .then(null, fail(done)); // so you can return a promise to let + // errors bubble out } ); -}; +} function channel_handshake(send, wait) { - return wait(defs.ChannelOpen)() - .then(function(open) { - assert.notEqual(0, open.channel); - send(defs.ChannelOpenOk, {channelId: Buffer.from('')}, open.channel); - return open.channel; - }); + return wait(defs.ChannelOpen)().then(function(open) { + assert.notEqual(0, open.channel); + send(defs.ChannelOpenOk, { channelId: Buffer.from('') }, open.channel); + return open.channel; + }); } // fields for deliver and publish and get-ok @@ -73,552 +74,716 @@ var DELIVER_FIELDS = { exchange: 'foo', routingKey: 'bar', replyCode: defs.constants.NO_ROUTE, - replyText: 'derp', + replyText: 'derp' }; function open(ch) { - return Promise.try(function() { - ch.allocate(); - return Promise.fromCallback(function(cb) { - ch._rpc(defs.ChannelOpen, {outOfBand: ''}, defs.ChannelOpenOk, cb); - }); + debugger; + var self = this; + return new this.Promise(function(resolve) { + resolve( + (function() { + ch.allocate(); + return new self.Promise(function(resolve, reject) { + ch._rpc(defs.ChannelOpen, { outOfBand: '' }, defs.ChannelOpenOk, function(err, result) { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + })() + ); }); } -suite("channel open and close", function() { - -test("open", channelTest( - function(ch, done) { - open(ch).then(succeed(done), fail(done)); - }, - function(send, wait, done) { - done(); - })); - -test("bad server", baseChannelTest( - function(c, done) { - var ch = new Channel(c); - open(ch).then(fail(done), succeed(done)); - }, - function(send, wait, done) { - return wait(defs.ChannelOpen)() - .then(function(open) { - send(defs.ChannelCloseOk, {}, open.channel); - }).then(succeed(done), fail(done)); - })); - -test("open, close", channelTest( - function(ch, done) { - open(ch) - .then(function() { - return new Promise(function(resolve) { - ch.closeBecause("Bye", defs.constants.REPLY_SUCCESS, resolve); +suite('channel open and close', function() { + test( + 'open', + channelTest( + function(ch, done) { + open(ch).then(succeed(done), fail(done)); + }, + function(send, wait, done) { + done(); + } + ) + ); + + test( + 'bad server', + baseChannelTest( + function(c, done) { + var ch = new Channel(c); + open(ch).then(fail(done), succeed(done)); + }, + function(send, wait, done) { + return wait(defs.ChannelOpen)() + .then(function(open) { + send(defs.ChannelCloseOk, {}, open.channel); + }) + .then(succeed(done), fail(done)); + } + ) + ); + + test( + 'open, close', + channelTest( + function(ch, done) { + open(ch) + .then(function() { + return new Promise(function(resolve) { + ch.closeBecause('Bye', defs.constants.REPLY_SUCCESS, resolve); + }); + }) + .then(succeed(done), fail(done)); + }, + function(send, wait, done, ch) { + return wait(defs.ChannelClose)() + .then(function(close) { + send(defs.ChannelCloseOk, {}, ch); + }) + .then(succeed(done), fail(done)); + } + ) + ); + + test( + 'server close', + channelTest( + function(ch, done) { + ch.on('error', function(error) { + assert.strictEqual(504, error.code); + assert.strictEqual(0, error.classId); + assert.strictEqual(0, error.methodId); + succeed(done)(); }); - }) - .then(succeed(done), fail(done)); - }, - function(send, wait, done, ch) { - return wait(defs.ChannelClose)() - .then(function(close) { - send(defs.ChannelCloseOk, {}, ch); - }).then(succeed(done), fail(done)); - })); - -test("server close", channelTest( - function(ch, done) { - ch.on('error', function(error) { - assert.strictEqual(504, error.code); - assert.strictEqual(0, error.classId); - assert.strictEqual(0, error.methodId); - succeed(done)(); - }); - open(ch); - }, - function(send, wait, done, ch) { - send(defs.ChannelClose, { - replyText: 'Forced close', - replyCode: defs.constants.CHANNEL_ERROR, - classId: 0, methodId: 0 - }, ch); - wait(defs.ChannelCloseOk)() - .then(succeed(done), fail(done)); - })); - -test("overlapping channel/server close", channelTest( - function(ch, done, conn) { - var both = latch(2, done); - conn.on('error', succeed(both)); - ch.on('close', succeed(both)); - open(ch).then(function() { - ch.closeBecause("Bye", defs.constants.REPLY_SUCCESS); - }, fail(both)); - }, - function(send, wait, done, ch) { - wait(defs.ChannelClose)() - .then(function() { - send(defs.ConnectionClose, { - replyText: 'Got there first', - replyCode: defs.constants.INTERNAL_ERROR, - classId: 0, methodId: 0 - }, 0); - }) - .then(wait(defs.ConnectionCloseOk)) - .then(succeed(done), fail(done)); - })); - -test("double close", channelTest( - function(ch, done) { - open(ch).then(function() { - ch.closeBecause("First close", defs.constants.REPLY_SUCCESS); - // NB no synchronisation, we do this straight away - assert.throws(function() { - ch.closeBecause("Second close", defs.constants.REPLY_SUCCESS); - }); - }).then(succeed(done), fail(done)); - }, - function(send, wait, done, ch) { - wait(defs.ChannelClose)() - .then(function() { - send(defs.ChannelCloseOk, { - }, ch); - }) - .then(succeed(done), fail(done)); - })); + open(ch); + }, + function(send, wait, done, ch) { + send( + defs.ChannelClose, + { + replyText: 'Forced close', + replyCode: defs.constants.CHANNEL_ERROR, + classId: 0, + methodId: 0 + }, + ch + ); + wait(defs.ChannelCloseOk)().then(succeed(done), fail(done)); + } + ) + ); + test( + 'overlapping channel/server close', + channelTest( + function(ch, done, conn) { + var both = latch(2, done); + conn.on('error', succeed(both)); + ch.on('close', succeed(both)); + open(ch).then(function() { + ch.closeBecause('Bye', defs.constants.REPLY_SUCCESS); + }, fail(both)); + }, + function(send, wait, done, ch) { + wait(defs.ChannelClose)() + .then(function() { + send( + defs.ConnectionClose, + { + replyText: 'Got there first', + replyCode: defs.constants.INTERNAL_ERROR, + classId: 0, + methodId: 0 + }, + 0 + ); + }) + .then(wait(defs.ConnectionCloseOk)) + .then(succeed(done), fail(done)); + } + ) + ); + + test( + 'double close', + channelTest( + function(ch, done) { + open(ch) + .then(function() { + ch.closeBecause('First close', defs.constants.REPLY_SUCCESS); + // NB no synchronisation, we do this straight away + assert.throws(function() { + ch.closeBecause('Second close', defs.constants.REPLY_SUCCESS); + }); + }) + .then(succeed(done), fail(done)); + }, + function(send, wait, done, ch) { + wait(defs.ChannelClose)() + .then(function() { + send(defs.ChannelCloseOk, {}, ch); + }) + .then(succeed(done), fail(done)); + } + ) + ); }); //suite -suite("channel machinery", function() { +suite('channel machinery', function() { + test( + 'RPC', + channelTest( + function(ch, done) { + var rpcLatch = latch(3, done); + open(ch) + .then(function() { + function wheeboom(err, f) { + if (err !== null) rpcLatch(err); + else rpcLatch(); + } + + var fields = { + prefetchCount: 10, + prefetchSize: 0, + global: false + }; + + ch._rpc(defs.BasicQos, fields, defs.BasicQosOk, wheeboom); + ch._rpc(defs.BasicQos, fields, defs.BasicQosOk, wheeboom); + ch._rpc(defs.BasicQos, fields, defs.BasicQosOk, wheeboom); + }) + .then(null, fail(rpcLatch)); + }, + function(send, wait, done, ch) { + function sendOk(f) { + send(defs.BasicQosOk, {}, ch); + } + + return wait(defs.BasicQos)() + .then(sendOk) + .then(wait(defs.BasicQos)) + .then(sendOk) + .then(wait(defs.BasicQos)) + .then(sendOk) + .then(succeed(done), fail(done)); + } + ) + ); -test("RPC", channelTest( - function(ch, done) { - var rpcLatch = latch(3, done); - open(ch).then(function() { + test( + 'Bad RPC', + channelTest( + function(ch, done) { + // We want to see the RPC rejected and the channel closed (with an + // error) + var errLatch = latch(2, done); + ch.on('error', function(error) { + assert.strictEqual(505, error.code); + assert.strictEqual(60, error.classId); + assert.strictEqual(72, error.methodId); + succeed(errLatch)(); + }); - function wheeboom(err, f) { - if (err !== null) rpcLatch(err); - else rpcLatch(); + open(ch).then(function() { + ch._rpc(defs.BasicRecover, { requeue: true }, defs.BasicRecoverOk, function(err) { + if (err !== null) errLatch(); + else errLatch(new Error('Expected RPC failure')); + }); + }, fail(errLatch)); + }, + function(send, wait, done, ch) { + return wait()() + .then(function() { + send(defs.BasicGetEmpty, { clusterId: '' }, ch); + }) // oh wait! that was wrong! expect a channel close + .then(wait(defs.ChannelClose)) + .then(function() { + send(defs.ChannelCloseOk, {}, ch); + }) + .then(succeed(done), fail(done)); } + ) + ); - var fields = { - prefetchCount: 10, - prefetchSize: 0, - global: false - }; - - ch._rpc(defs.BasicQos, fields, defs.BasicQosOk, wheeboom); - ch._rpc(defs.BasicQos, fields, defs.BasicQosOk, wheeboom); - ch._rpc(defs.BasicQos, fields, defs.BasicQosOk, wheeboom); - }).then(null, fail(rpcLatch)); - }, - function(send, wait, done, ch) { - function sendOk(f) { - send(defs.BasicQosOk, {}, ch); - } + test( + 'RPC on closed channel', + channelTest( + function(ch, done) { + open(ch); + + var close = new Promise(function(resolve) { + ch.on('error', function(error) { + assert.strictEqual(504, error.code); + assert.strictEqual(0, error.classId); + assert.strictEqual(0, error.methodId); + resolve(); + }); + }); - return wait(defs.BasicQos)() - .then(sendOk) - .then(wait(defs.BasicQos)) - .then(sendOk) - .then(wait(defs.BasicQos)) - .then(sendOk) - .then(succeed(done), fail(done)); - })); - -test("Bad RPC", channelTest( - function(ch, done) { - // We want to see the RPC rejected and the channel closed (with an - // error) - var errLatch = latch(2, done); - ch.on('error', function(error) { - assert.strictEqual(505, error.code); - assert.strictEqual(60, error.classId); - assert.strictEqual(72, error.methodId); - succeed(errLatch)(); - }); + function failureCb(resolve, reject) { + return function(err) { + if (err !== null) resolve(); + else reject(); + }; + } + + var fail1 = new Promise(function(resolve, reject) { + return ch._rpc(defs.BasicRecover, { requeue: true }, defs.BasicRecoverOk, failureCb(resolve, reject)); + }); + + var fail2 = new Promise(function(resolve, reject) { + return ch._rpc(defs.BasicRecover, { requeue: true }, defs.BasicRecoverOk, failureCb(resolve, reject)); + }); + + Promise.join(close, fail1, fail2) + .then(succeed(done)) + .catch(fail(done)); + }, + function(send, wait, done, ch) { + wait(defs.BasicRecover)() + .then(function() { + send( + defs.ChannelClose, + { + replyText: 'Nuh-uh!', + replyCode: defs.constants.CHANNEL_ERROR, + methodId: 0, + classId: 0 + }, + ch + ); + return wait(defs.ChannelCloseOk); + }) + .then(succeed(done)) + .catch(fail(done)); + } + ) + ); + + test( + 'publish all < single chunk threshold', + channelTest( + function(ch, done) { + open(ch) + .then(function() { + ch.sendMessage( + { + exchange: 'foo', + routingKey: 'bar', + mandatory: false, + immediate: false, + ticket: 0 + }, + {}, + Buffer.from('foobar') + ); + }) + .then(succeed(done), fail(done)); + }, + function(send, wait, done, ch) { + wait(defs.BasicPublish)() + .then(wait(defs.BasicProperties)) + .then(wait(undefined)) // content frame + .then(function(f) { + assert.equal('foobar', f.content.toString()); + }) + .then(succeed(done), fail(done)); + } + ) + ); + + test( + 'publish content > single chunk threshold', + channelTest( + function(ch, done) { + open(ch); + completes(function() { + ch.sendMessage( + { + exchange: 'foo', + routingKey: 'bar', + mandatory: false, + immediate: false, + ticket: 0 + }, + {}, + Buffer.alloc(3000) + ); + }, done); + }, + function(send, wait, done, ch) { + wait(defs.BasicPublish)() + .then(wait(defs.BasicProperties)) + .then(wait(undefined)) // content frame + .then(function(f) { + assert.equal(3000, f.content.length); + }) + .then(succeed(done), fail(done)); + } + ) + ); + + test( + 'publish method & headers > threshold', + channelTest( + function(ch, done) { + open(ch); + completes(function() { + ch.sendMessage( + { + exchange: 'foo', + routingKey: 'bar', + mandatory: false, + immediate: false, + ticket: 0 + }, + { + headers: { foo: Buffer.alloc(3000) } + }, + Buffer.from('foobar') + ); + }, done); + }, + function(send, wait, done, ch) { + wait(defs.BasicPublish)() + .then(wait(defs.BasicProperties)) + .then(wait(undefined)) // content frame + .then(function(f) { + assert.equal('foobar', f.content.toString()); + }) + .then(succeed(done), fail(done)); + } + ) + ); + + test( + 'publish zero-length message', + channelTest( + function(ch, done) { + open(ch); + completes(function() { + ch.sendMessage( + { + exchange: 'foo', + routingKey: 'bar', + mandatory: false, + immediate: false, + ticket: 0 + }, + {}, + Buffer.alloc(0) + ); + ch.sendMessage( + { + exchange: 'foo', + routingKey: 'bar', + mandatory: false, + immediate: false, + ticket: 0 + }, + {}, + Buffer.alloc(0) + ); + }, done); + }, + function(send, wait, done, ch) { + wait(defs.BasicPublish)() + .then(wait(defs.BasicProperties)) + // no content frame for a zero-length message + .then(wait(defs.BasicPublish)) + .then(succeed(done), fail(done)); + } + ) + ); - open(ch) - .then(function() { - ch._rpc(defs.BasicRecover, {requeue: true}, defs.BasicRecoverOk, - function(err) { - if (err !== null) errLatch(); - else errLatch(new Error('Expected RPC failure')); - }); - }, fail(errLatch)); - }, - function(send, wait, done, ch) { - return wait()() - .then(function() { - send(defs.BasicGetEmpty, {clusterId: ''}, ch); - }) // oh wait! that was wrong! expect a channel close - .then(wait(defs.ChannelClose)) - .then(function() { - send(defs.ChannelCloseOk, {}, ch); - }).then(succeed(done), fail(done)); - })); - -test("RPC on closed channel", channelTest( - function(ch, done) { - open(ch); - - var close = new Promise(function(resolve) { + test( + 'delivery', + channelTest( + function(ch, done) { + open(ch); + ch.on('delivery', function(m) { + completes(function() { + assert.equal('barfoo', m.content.toString()); + }, done); + }); + }, + function(send, wait, done, ch) { + completes(function() { + send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('barfoo')); + }, done); + } + ) + ); + + test( + 'zero byte msg', + channelTest( + function(ch, done) { + open(ch); + ch.on('delivery', function(m) { + completes(function() { + assert.deepEqual(Buffer.alloc(0), m.content); + }, done); + }); + }, + function(send, wait, done, ch) { + completes(function() { + send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('')); + }, done); + } + ) + ); + + test( + 'bad delivery', + channelTest( + function(ch, done) { + var errorAndClose = latch(2, done); ch.on('error', function(error) { - assert.strictEqual(504, error.code); - assert.strictEqual(0, error.classId); - assert.strictEqual(0, error.methodId); - resolve(); - }); - }); + assert.strictEqual(505, error.code); + assert.strictEqual(60, error.classId); + assert.strictEqual(60, error.methodId); + succeed(errorAndClose)(); + }); + ch.on('close', succeed(errorAndClose)); + open(ch); + }, + function(send, wait, done, ch) { + send(defs.BasicDeliver, DELIVER_FIELDS, ch); + // now send another deliver without having sent the content + send(defs.BasicDeliver, DELIVER_FIELDS, ch); + return wait(defs.ChannelClose)() + .then(function() { + send(defs.ChannelCloseOk, {}, ch); + }) + .then(succeed(done), fail(done)); + } + ) + ); - function failureCb(resolve, reject) { - return function(err) { - if (err !== null) resolve(); - else reject(); + test( + 'bad content send', + channelTest( + function(ch, done) { + completes(function() { + open(ch); + assert.throws(function() { + ch.sendMessage({ routingKey: 'foo', exchange: 'amq.direct' }, {}, null); + }); + }, done); + }, + function(send, wait, done, ch) { + done(); } - } + ) + ); - var fail1 = new Promise(function(resolve, reject) { - return ch._rpc(defs.BasicRecover, {requeue:true}, defs.BasicRecoverOk, - failureCb(resolve, reject)); - }); + test( + 'bad properties send', + channelTest( + function(ch, done) { + completes(function() { + open(ch); + assert.throws(function() { + ch.sendMessage({ routingKey: 'foo', exchange: 'amq.direct' }, { contentEncoding: 7 }, Buffer.from('foobar')); + }); + }, done); + }, + function(send, wait, done, ch) { + done(); + } + ) + ); - var fail2 = new Promise(function(resolve, reject) { - return ch._rpc(defs.BasicRecover, {requeue:true}, defs.BasicRecoverOk, - failureCb(resolve, reject)); - }); + test( + 'bad consumer', + channelTest( + function(ch, done) { + var errorAndClose = latch(2, done); + ch.on('delivery', function() { + throw new Error('I am a bad consumer'); + }); + ch.on('error', function(error) { + assert.strictEqual(541, error.code); + assert.strictEqual(undefined, error.classId); + assert.strictEqual(undefined, error.methodId); + succeed(errorAndClose)(); + }); + ch.on('close', succeed(errorAndClose)); + open(ch); + }, + function(send, wait, done, ch) { + send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('barfoo')); + return wait(defs.ChannelClose)() + .then(function() { + send(defs.ChannelCloseOk, {}, ch); + }) + .then(succeed(done), fail(done)); + } + ) + ); - Promise.join(close, fail1, fail2) - .then(succeed(done)) - .catch(fail(done)); - }, - function(send, wait, done, ch) { - wait(defs.BasicRecover)() - .then(function() { - send(defs.ChannelClose, { - replyText: 'Nuh-uh!', - replyCode: defs.constants.CHANNEL_ERROR, - methodId: 0, classId: 0 - }, ch); - return wait(defs.ChannelCloseOk); - }) - .then(succeed(done)) - .catch(fail(done)); - })); - -test("publish all < single chunk threshold", channelTest( - function(ch, done) { - open(ch) - .then(function() { - ch.sendMessage({ - exchange: 'foo', routingKey: 'bar', - mandatory: false, immediate: false, ticket: 0 - }, {}, Buffer.from('foobar')); - }) - .then(succeed(done), fail(done)); - }, - function(send, wait, done, ch) { - wait(defs.BasicPublish)() - .then(wait(defs.BasicProperties)) - .then(wait(undefined)) // content frame - .then(function(f) { - assert.equal('foobar', f.content.toString()); - }).then(succeed(done), fail(done)); - })); - -test("publish content > single chunk threshold", channelTest( - function(ch, done) { - open(ch); - completes(function() { - ch.sendMessage({ - exchange: 'foo', routingKey: 'bar', - mandatory: false, immediate: false, ticket: 0 - }, {}, Buffer.alloc(3000)); - }, done); - }, - function(send, wait, done, ch) { - wait(defs.BasicPublish)() - .then(wait(defs.BasicProperties)) - .then(wait(undefined)) // content frame - .then(function(f) { - assert.equal(3000, f.content.length); - }).then(succeed(done), fail(done)); - })); - -test("publish method & headers > threshold", channelTest( - function(ch, done) { - open(ch); - completes(function() { - ch.sendMessage({ - exchange: 'foo', routingKey: 'bar', - mandatory: false, immediate: false, ticket: 0 - }, { - headers: {foo: Buffer.alloc(3000)} - }, Buffer.from('foobar')); - }, done); - }, - function(send, wait, done, ch) { - wait(defs.BasicPublish)() - .then(wait(defs.BasicProperties)) - .then(wait(undefined)) // content frame - .then(function(f) { - assert.equal('foobar', f.content.toString()); - }).then(succeed(done), fail(done)); - })); - -test("publish zero-length message", channelTest( - function(ch, done) { - open(ch); - completes(function() { - ch.sendMessage({ - exchange: 'foo', routingKey: 'bar', - mandatory: false, immediate: false, ticket: 0 - }, {}, Buffer.alloc(0)); - ch.sendMessage({ - exchange: 'foo', routingKey: 'bar', - mandatory: false, immediate: false, ticket: 0 - }, {}, Buffer.alloc(0)); - }, done); - }, - function(send, wait, done, ch) { - wait(defs.BasicPublish)() - .then(wait(defs.BasicProperties)) - // no content frame for a zero-length message - .then(wait(defs.BasicPublish)) - .then(succeed(done), fail(done)); - })); - -test("delivery", channelTest( - function(ch, done) { - open(ch); - ch.on('delivery', function(m) { - completes(function() { - assert.equal('barfoo', m.content.toString()); - }, done); - }); - }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('barfoo')); - }, done); - })); - -test("zero byte msg", channelTest( - function(ch, done) { - open(ch); - ch.on('delivery', function(m) { - completes(function() { - assert.deepEqual(Buffer.alloc(0), m.content); - }, done); - }); - }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('')); - }, done); - })); - -test("bad delivery", channelTest( - function(ch, done) { - var errorAndClose = latch(2, done); - ch.on('error', function(error) { - assert.strictEqual(505, error.code); - assert.strictEqual(60, error.classId); - assert.strictEqual(60, error.methodId); - succeed(errorAndClose)(); - }); - ch.on('close', succeed(errorAndClose)); - open(ch); - }, - function(send, wait, done, ch) { - send(defs.BasicDeliver, DELIVER_FIELDS, ch); - // now send another deliver without having sent the content - send(defs.BasicDeliver, DELIVER_FIELDS, ch); - return wait(defs.ChannelClose)() - .then(function() { - send(defs.ChannelCloseOk, {}, ch); - }).then(succeed(done), fail(done)); - })); - -test("bad content send", channelTest( - function(ch, done) { - completes(function() { - open(ch); - assert.throws(function() { - ch.sendMessage({routingKey: 'foo', - exchange: 'amq.direct'}, - {}, null); - }); - }, done); - }, - function(send, wait, done, ch) { - done(); - })); - -test("bad properties send", channelTest( - function(ch, done) { - completes(function() { - open(ch); - assert.throws(function() { - ch.sendMessage({routingKey: 'foo', - exchange: 'amq.direct'}, - {contentEncoding: 7}, - Buffer.from('foobar')); - }); - }, done); - }, - function(send, wait, done, ch) { - done(); - })); - -test("bad consumer", channelTest( - function(ch, done) { - var errorAndClose = latch(2, done); - ch.on('delivery', function() { - throw new Error("I am a bad consumer"); - }); - ch.on('error', function(error) { - assert.strictEqual(541, error.code); - assert.strictEqual(undefined, error.classId); - assert.strictEqual(undefined, error.methodId); - succeed(errorAndClose)(); - }); - ch.on('close', succeed(errorAndClose)); - open(ch); - }, - function(send, wait, done, ch) { - send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('barfoo')); - return wait(defs.ChannelClose)() - .then(function() { - send(defs.ChannelCloseOk, {}, ch); - }).then(succeed(done), fail(done)); - })); - -test("bad send in consumer", channelTest( - function(ch, done) { - var errorAndClose = latch(2, done); - ch.on('close', succeed(errorAndClose)); - ch.on('error', function(error) { - assert.strictEqual(541, error.code); - assert.strictEqual(undefined, error.classId); - assert.strictEqual(undefined, error.methodId); - succeed(errorAndClose)(); - }); + test( + 'bad send in consumer', + channelTest( + function(ch, done) { + var errorAndClose = latch(2, done); + ch.on('close', succeed(errorAndClose)); + ch.on('error', function(error) { + assert.strictEqual(541, error.code); + assert.strictEqual(undefined, error.classId); + assert.strictEqual(undefined, error.methodId); + succeed(errorAndClose)(); + }); - ch.on('delivery', function() { - ch.sendMessage({routingKey: 'foo', - exchange: 'amq.direct'}, - {}, null); // can't send null - }); + ch.on('delivery', function() { + ch.sendMessage({ routingKey: 'foo', exchange: 'amq.direct' }, {}, null); // can't send null + }); - open(ch); - }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicDeliver, DELIVER_FIELDS, ch, - Buffer.from('barfoo')); - }, done); - return wait(defs.ChannelClose)() - .then(function() { - send(defs.ChannelCloseOk, {}, ch); - }).then(succeed(done), fail(done)); - })); - -test("return", channelTest( - function(ch, done) { - ch.on('return', function(m) { - completes(function() { - assert.equal('barfoo', m.content.toString()); - }, done); - }); - open(ch); - }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicReturn, DELIVER_FIELDS, ch, Buffer.from('barfoo')); - }, done); - })); - -test("cancel", channelTest( - function(ch, done) { - ch.on('cancel', function(f) { - completes(function() { - assert.equal('product of society', f.consumerTag); - }, done); - }); - open(ch); - }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicCancel, { - consumerTag: 'product of society', - nowait: false - }, ch); - }, done); - })); - -function confirmTest(variety, Method) { - return test('confirm ' + variety, channelTest( - function(ch, done) { - ch.on(variety, function(f) { + open(ch); + }, + function(send, wait, done, ch) { completes(function() { - assert.equal(1, f.deliveryTag); + send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('barfoo')); }, done); - }); - open(ch); - }, - function(send, wait, done, ch) { - completes(function() { - send(Method, { - deliveryTag: 1, - multiple: false - }, ch); - }, done); - })); -} + return wait(defs.ChannelClose)() + .then(function() { + send(defs.ChannelCloseOk, {}, ch); + }) + .then(succeed(done), fail(done)); + } + ) + ); -confirmTest("ack", defs.BasicAck); -confirmTest("nack", defs.BasicNack); + test( + 'return', + channelTest( + function(ch, done) { + ch.on('return', function(m) { + completes(function() { + assert.equal('barfoo', m.content.toString()); + }, done); + }); + open(ch); + }, + function(send, wait, done, ch) { + completes(function() { + send(defs.BasicReturn, DELIVER_FIELDS, ch, Buffer.from('barfoo')); + }, done); + } + ) + ); -test("out-of-order acks", channelTest( - function(ch, done) { - var allConfirms = latch(3, function() { - completes(function() { - assert.equal(0, ch.unconfirmed.length); - assert.equal(4, ch.lwm); - }, done); - }); - ch.pushConfirmCallback(allConfirms); - ch.pushConfirmCallback(allConfirms); - ch.pushConfirmCallback(allConfirms); - open(ch); - }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicAck, {deliveryTag: 2, multiple: false}, ch); - send(defs.BasicAck, {deliveryTag: 3, multiple: false}, ch); - send(defs.BasicAck, {deliveryTag: 1, multiple: false}, ch); - }, done); - })); - -test("not all out-of-order acks", channelTest( - function(ch, done) { - var allConfirms = latch(2, function() { - completes(function() { - assert.equal(1, ch.unconfirmed.length); - assert.equal(3, ch.lwm); - }, done); - }); - ch.pushConfirmCallback(allConfirms); // tag = 1 - ch.pushConfirmCallback(allConfirms); // tag = 2 - ch.pushConfirmCallback(function() { - done(new Error('Confirm callback should not be called')); - }); - open(ch); - }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicAck, {deliveryTag: 2, multiple: false}, ch); - send(defs.BasicAck, {deliveryTag: 1, multiple: false}, ch); - }, done); - })); + test( + 'cancel', + channelTest( + function(ch, done) { + ch.on('cancel', function(f) { + completes(function() { + assert.equal('product of society', f.consumerTag); + }, done); + }); + open(ch); + }, + function(send, wait, done, ch) { + completes(function() { + send( + defs.BasicCancel, + { + consumerTag: 'product of society', + nowait: false + }, + ch + ); + }, done); + } + ) + ); + + function confirmTest(variety, Method) { + return test( + 'confirm ' + variety, + channelTest( + function(ch, done) { + ch.on(variety, function(f) { + completes(function() { + assert.equal(1, f.deliveryTag); + }, done); + }); + open(ch); + }, + function(send, wait, done, ch) { + completes(function() { + send( + Method, + { + deliveryTag: 1, + multiple: false + }, + ch + ); + }, done); + } + ) + ); + } + + confirmTest('ack', defs.BasicAck); + confirmTest('nack', defs.BasicNack); + + test( + 'out-of-order acks', + channelTest( + function(ch, done) { + var allConfirms = latch(3, function() { + completes(function() { + assert.equal(0, ch.unconfirmed.length); + assert.equal(4, ch.lwm); + }, done); + }); + ch.pushConfirmCallback(allConfirms); + ch.pushConfirmCallback(allConfirms); + ch.pushConfirmCallback(allConfirms); + open(ch); + }, + function(send, wait, done, ch) { + completes(function() { + send(defs.BasicAck, { deliveryTag: 2, multiple: false }, ch); + send(defs.BasicAck, { deliveryTag: 3, multiple: false }, ch); + send(defs.BasicAck, { deliveryTag: 1, multiple: false }, ch); + }, done); + } + ) + ); + test( + 'not all out-of-order acks', + channelTest( + function(ch, done) { + var allConfirms = latch(2, function() { + completes(function() { + assert.equal(1, ch.unconfirmed.length); + assert.equal(3, ch.lwm); + }, done); + }); + ch.pushConfirmCallback(allConfirms); // tag = 1 + ch.pushConfirmCallback(allConfirms); // tag = 2 + ch.pushConfirmCallback(function() { + done(new Error('Confirm callback should not be called')); + }); + open(ch); + }, + function(send, wait, done, ch) { + completes(function() { + send(defs.BasicAck, { deliveryTag: 2, multiple: false }, ch); + send(defs.BasicAck, { deliveryTag: 1, multiple: false }, ch); + }, done); + } + ) + ); }); diff --git a/test/channel_api.js b/test/channel_api.js index bd5473f0..1e1abc4f 100644 --- a/test/channel_api.js +++ b/test/channel_api.js @@ -3,16 +3,17 @@ var assert = require('assert'); var api = require('../channel_api'); var util = require('./util'); -var succeed = util.succeed, fail = util.fail; +var succeed = util.succeed, + fail = util.fail; var schedule = util.schedule; var randomString = util.randomString; var Promise = require('bluebird'); var Buffer = require('safe-buffer').Buffer; -var URL = process.env.URL || 'amqp://localhost'; +var URL = process.env.URL || 'amqp://localhost:5673'; function connect() { - return api.connect(URL); + return api.connect(URL, { Promise: Promise }); } // Expect this promise to fail, and flip the results accordingly. @@ -24,12 +25,14 @@ function expectFail(promise) { // I'll rely on operations being rejected, rather than the channel // close error, to detect failure. -function ignore () {} +function ignore() {} function ignoreErrors(c) { - c.on('error', ignore); return c; + c.on('error', ignore); + return c; } function logErrors(c) { - c.on('error', console.warn); return c; + c.on('error', console.warn); + return c; } // Run a test with `name`, given a function that takes an open @@ -37,510 +40,497 @@ function logErrors(c) { // rejected on test failure. function channel_test(chmethod, name, chfun) { test(name, function(done) { - connect(URL).then(logErrors).then(function(c) { - c[chmethod]().then(ignoreErrors).then(chfun) - .then(succeed(done), fail(done)) - // close the connection regardless of what happens with the test - .finally(function() {c.close();}); - }); + connect(URL) + .then(logErrors) + .then(function(c) { + c[chmethod]() + .then(ignoreErrors) + .then(chfun) + .then(succeed(done), fail(done)) + // close the connection regardless of what happens with the test + .finally(function() { + c.close(); + }); + }); }); } var chtest = channel_test.bind(null, 'createChannel'); -suite("connect", function() { - -test("at all", function(done) { - connect(URL).then(function(c) { - return c.close() - ;}).then(succeed(done), fail(done)); -}); - -chtest("create channel", ignore); // i.e., just don't bork +suite('connect', function() { + test('at all', function(done) { + connect(URL) + .then(function(c) { + return c.close(); + }) + .then(succeed(done), fail(done)); + }); + chtest('create channel', ignore); // i.e., just don't bork }); -var QUEUE_OPTS = {durable: false}; -var EX_OPTS = {durable: false}; - -suite("assert, check, delete", function() { +var QUEUE_OPTS = { durable: false }; +var EX_OPTS = { durable: false }; -chtest("assert and check queue", function(ch) { - return ch.assertQueue('test.check-queue', QUEUE_OPTS) - .then(function(qok) { +suite('assert, check, delete', function() { + chtest('assert and check queue', function(ch) { + return ch.assertQueue('test.check-queue', QUEUE_OPTS).then(function(qok) { return ch.checkQueue('test.check-queue'); }); -}); + }); -chtest("assert and check exchange", function(ch) { - return ch.assertExchange('test.check-exchange', 'direct', EX_OPTS) - .then(function(eok) { + chtest('assert and check exchange', function(ch) { + return ch.assertExchange('test.check-exchange', 'direct', EX_OPTS).then(function(eok) { assert.equal('test.check-exchange', eok.exchange); return ch.checkExchange('test.check-exchange'); }); -}); + }); -chtest("fail on reasserting queue with different options", - function(ch) { - var q = 'test.reassert-queue'; - return ch.assertQueue( - q, {durable: false, autoDelete: true}) - .then(function() { - return expectFail( - ch.assertQueue(q, {durable: false, - autoDelete: false})); - }); - }); - -chtest("fail on checking a queue that's not there", function(ch) { - return expectFail(ch.checkQueue('test.random-' + randomString())); -}); + chtest('fail on reasserting queue with different options', function(ch) { + var q = 'test.reassert-queue'; + return ch.assertQueue(q, { durable: false, autoDelete: true }).then(function() { + return expectFail(ch.assertQueue(q, { durable: false, autoDelete: false })); + }); + }); -chtest("fail on checking an exchange that's not there", function(ch) { - return expectFail(ch.checkExchange('test.random-' + randomString())); -}); + chtest("fail on checking a queue that's not there", function(ch) { + return expectFail(ch.checkQueue('test.random-' + randomString())); + }); -chtest("fail on reasserting exchange with different type", - function(ch) { - var ex = 'test.reassert-ex'; - return ch.assertExchange(ex, 'fanout', EX_OPTS) - .then(function() { - return expectFail( - ch.assertExchange(ex, 'direct', EX_OPTS)); - }); - }); - -chtest("channel break on publishing to non-exchange", function(ch) { - return new Promise(function(resolve) { - ch.on('error', resolve); - ch.publish(randomString(), '', Buffer.from('foobar')); + chtest("fail on checking an exchange that's not there", function(ch) { + return expectFail(ch.checkExchange('test.random-' + randomString())); }); -}); -chtest("delete queue", function(ch) { - var q = 'test.delete-queue'; - return Promise.join( - ch.assertQueue(q, QUEUE_OPTS), - ch.checkQueue(q)) - .then(function() { - return ch.deleteQueue(q);}) - .then(function() { - return expectFail(ch.checkQueue(q));}); -}); + chtest('fail on reasserting exchange with different type', function(ch) { + var ex = 'test.reassert-ex'; + return ch.assertExchange(ex, 'fanout', EX_OPTS).then(function() { + return expectFail(ch.assertExchange(ex, 'direct', EX_OPTS)); + }); + }); -chtest("delete exchange", function(ch) { - var ex = 'test.delete-exchange'; - return Promise.join( - ch.assertExchange(ex, 'fanout', EX_OPTS), - ch.checkExchange(ex)) - .then(function() { - return ch.deleteExchange(ex);}) - .then(function() { - return expectFail(ch.checkExchange(ex));}); -}); + chtest('channel break on publishing to non-exchange', function(ch) { + return new Promise(function(resolve) { + ch.on('error', resolve); + ch.publish(randomString(), '', Buffer.from('foobar')); + }); + }); + + chtest('delete queue', function(ch) { + var q = 'test.delete-queue'; + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.checkQueue(q)) + .then(function() { + return ch.deleteQueue(q); + }) + .then(function() { + return expectFail(ch.checkQueue(q)); + }); + }); + chtest('delete exchange', function(ch) { + var ex = 'test.delete-exchange'; + return Promise.join(ch.assertExchange(ex, 'fanout', EX_OPTS), ch.checkExchange(ex)) + .then(function() { + return ch.deleteExchange(ex); + }) + .then(function() { + return expectFail(ch.checkExchange(ex)); + }); + }); }); // Wait for the queue to meet the condition; useful for waiting for // messages to arrive, for example. function waitForQueue(q, condition) { return connect(URL).then(function(c) { - return c.createChannel() - .then(function(ch) { - return ch.checkQueue(q).then(function(qok) { - function check() { - return ch.checkQueue(q).then(function(qok) { - if (condition(qok)) { - c.close(); - return qok; - } - else schedule(check); - }); - } - return check(); - }); + return c.createChannel().then(function(ch) { + return ch.checkQueue(q).then(function(qok) { + function check() { + return ch.checkQueue(q).then(function(qok) { + if (condition(qok)) { + c.close(); + return qok; + } else schedule(check); + }); + } + return check(); }); + }); }); } // Return a promise that resolves when the queue has at least `num` // messages. If num is not supplied its assumed to be 1. function waitForMessages(q, num) { - var min = (num === undefined) ? 1 : num; + var min = num === undefined ? 1 : num; return waitForQueue(q, function(qok) { return qok.messageCount >= min; }); } -suite("sendMessage", function() { - -// publish different size messages -chtest("send to queue and get from queue", function(ch) { - var q = 'test.send-to-q'; - var msg = randomString(); - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) - .then(function() { - ch.sendToQueue(q, Buffer.from(msg)); - return waitForMessages(q); - }) - .then(function() { - return ch.get(q, {noAck: true}); - }) - .then(function(m) { - assert(m); - assert.equal(msg, m.content.toString()); - }); -}); +suite('sendMessage', function() { + // publish different size messages + chtest('send to queue and get from queue', function(ch) { + var q = 'test.send-to-q'; + var msg = randomString(); + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) + .then(function() { + ch.sendToQueue(q, Buffer.from(msg)); + return waitForMessages(q); + }) + .then(function() { + return ch.get(q, { noAck: true }); + }) + .then(function(m) { + assert(m); + assert.equal(msg, m.content.toString()); + }); + }); -chtest("send (and get) zero content to queue", function(ch) { - var q = 'test.send-to-q'; - var msg = Buffer.alloc(0); - return Promise.join( - ch.assertQueue(q, QUEUE_OPTS), - ch.purgeQueue(q)) - .then(function() { - ch.sendToQueue(q, msg); - return waitForMessages(q);}) - .then(function() { - return ch.get(q, {noAck: true});}) - .then(function(m) { - assert(m); - assert.deepEqual(msg, m.content); - }); + chtest('send (and get) zero content to queue', function(ch) { + var q = 'test.send-to-q'; + var msg = Buffer.alloc(0); + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) + .then(function() { + ch.sendToQueue(q, msg); + return waitForMessages(q); + }) + .then(function() { + return ch.get(q, { noAck: true }); + }) + .then(function(m) { + assert(m); + assert.deepEqual(msg, m.content); + }); + }); }); -}); +suite('binding, consuming', function() { + // bind, publish, get + chtest('route message', function(ch) { + var ex = 'test.route-message'; + var q = 'test.route-message-q'; + var msg = randomString(); -suite("binding, consuming", function() { - -// bind, publish, get -chtest("route message", function(ch) { - var ex = 'test.route-message'; - var q = 'test.route-message-q'; - var msg = randomString(); - - return Promise.join( - ch.assertExchange(ex, 'fanout', EX_OPTS), - ch.assertQueue(q, QUEUE_OPTS), - ch.purgeQueue(q), - ch.bindQueue(q, ex, '', {})) - .then(function() { - ch.publish(ex, '', Buffer.from(msg)); - return waitForMessages(q);}) - .then(function() { - return ch.get(q, {noAck: true});}) - .then(function(m) { - assert(m); - assert.equal(msg, m.content.toString()); - }); -}); + return Promise.join(ch.assertExchange(ex, 'fanout', EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindQueue(q, ex, '', {})) + .then(function() { + ch.publish(ex, '', Buffer.from(msg)); + return waitForMessages(q); + }) + .then(function() { + return ch.get(q, { noAck: true }); + }) + .then(function(m) { + assert(m); + assert.equal(msg, m.content.toString()); + }); + }); -// send to queue, purge, get-empty -chtest("purge queue", function(ch) { - var q = 'test.purge-queue'; - return ch.assertQueue(q, {durable: false}) - .then(function() { - ch.sendToQueue(q, Buffer.from('foobar')); - return waitForMessages(q);}) - .then(function() { - ch.purgeQueue(q); - return ch.get(q, {noAck: true});}) - .then(function(m) { - assert(!m); // get-empty - }); -}); + // send to queue, purge, get-empty + chtest('purge queue', function(ch) { + var q = 'test.purge-queue'; + return ch + .assertQueue(q, { durable: false }) + .then(function() { + ch.sendToQueue(q, Buffer.from('foobar')); + return waitForMessages(q); + }) + .then(function() { + ch.purgeQueue(q); + return ch.get(q, { noAck: true }); + }) + .then(function(m) { + assert(!m); // get-empty + }); + }); -// bind again, unbind, publish, get-empty -chtest("unbind queue", function(ch) { - var ex = 'test.unbind-queue-ex'; - var q = 'test.unbind-queue'; - var viabinding = randomString(); - var direct = randomString(); - - return Promise.join( - ch.assertExchange(ex, 'fanout', EX_OPTS), - ch.assertQueue(q, QUEUE_OPTS), - ch.purgeQueue(q), - ch.bindQueue(q, ex, '', {})) - .then(function() { - ch.publish(ex, '', Buffer.from('foobar')); - return waitForMessages(q);}) - .then(function() { // message got through! - return ch.get(q, {noAck:true}) - .then(function(m) {assert(m);});}) - .then(function() { - return ch.unbindQueue(q, ex, '', {});}) - .then(function() { - // via the no-longer-existing binding - ch.publish(ex, '', Buffer.from(viabinding)); - // direct to the queue - ch.sendToQueue(q, Buffer.from(direct)); - return waitForMessages(q);}) - .then(function() {return ch.get(q)}) - .then(function(m) { - // the direct to queue message got through, the via-binding - // message (sent first) did not - assert.equal(direct, m.content.toString()); - }); -}); + // bind again, unbind, publish, get-empty + chtest('unbind queue', function(ch) { + var ex = 'test.unbind-queue-ex'; + var q = 'test.unbind-queue'; + var viabinding = randomString(); + var direct = randomString(); + + return Promise.join(ch.assertExchange(ex, 'fanout', EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindQueue(q, ex, '', {})) + .then(function() { + ch.publish(ex, '', Buffer.from('foobar')); + return waitForMessages(q); + }) + .then(function() { + // message got through! + return ch.get(q, { noAck: true }).then(function(m) { + assert(m); + }); + }) + .then(function() { + return ch.unbindQueue(q, ex, '', {}); + }) + .then(function() { + // via the no-longer-existing binding + ch.publish(ex, '', Buffer.from(viabinding)); + // direct to the queue + ch.sendToQueue(q, Buffer.from(direct)); + return waitForMessages(q); + }) + .then(function() { + return ch.get(q); + }) + .then(function(m) { + // the direct to queue message got through, the via-binding + // message (sent first) did not + assert.equal(direct, m.content.toString()); + }); + }); -// To some extent this is now just testing semantics of the server, -// but we can at least try out a few settings, and consume. -chtest("consume via exchange-exchange binding", function(ch) { - var ex1 = 'test.ex-ex-binding1', ex2 = 'test.ex-ex-binding2'; - var q = 'test.ex-ex-binding-q'; - var rk = 'test.routing.key', msg = randomString(); - return Promise.join( - ch.assertExchange(ex1, 'direct', EX_OPTS), - ch.assertExchange(ex2, 'fanout', - {durable: false, internal: true}), - ch.assertQueue(q, QUEUE_OPTS), - ch.purgeQueue(q), - ch.bindExchange(ex2, ex1, rk, {}), - ch.bindQueue(q, ex2, '', {})) - .then(function() { + // To some extent this is now just testing semantics of the server, + // but we can at least try out a few settings, and consume. + chtest('consume via exchange-exchange binding', function(ch) { + var ex1 = 'test.ex-ex-binding1', + ex2 = 'test.ex-ex-binding2'; + var q = 'test.ex-ex-binding-q'; + var rk = 'test.routing.key', + msg = randomString(); + return Promise.join(ch.assertExchange(ex1, 'direct', EX_OPTS), ch.assertExchange(ex2, 'fanout', { durable: false, internal: true }), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindExchange(ex2, ex1, rk, {}), ch.bindQueue(q, ex2, '', {})).then(function() { return new Promise(function(resolve, reject) { function delivery(m) { if (m.content.toString() === msg) resolve(); - else reject(new Error("Wrong message")); + else reject(new Error('Wrong message')); } - ch.consume(q, delivery, {noAck: true}) - .then(function() { - ch.publish(ex1, rk, Buffer.from(msg)); - }); + ch.consume(q, delivery, { noAck: true }).then(function() { + ch.publish(ex1, rk, Buffer.from(msg)); + }); }); }); -}); + }); -// bind again, unbind, publish, get-empty -chtest("unbind exchange", function(ch) { - var source = 'test.unbind-ex-source'; - var dest = 'test.unbind-ex-dest'; - var q = 'test.unbind-ex-queue'; - var viabinding = randomString(); - var direct = randomString(); - - return Promise.join( - ch.assertExchange(source, 'fanout', EX_OPTS), - ch.assertExchange(dest, 'fanout', EX_OPTS), - ch.assertQueue(q, QUEUE_OPTS), - ch.purgeQueue(q), - ch.bindExchange(dest, source, '', {}), - ch.bindQueue(q, dest, '', {})) - .then(function() { - ch.publish(source, '', Buffer.from('foobar')); - return waitForMessages(q);}) - .then(function() { // message got through! - return ch.get(q, {noAck:true}) - .then(function(m) {assert(m);});}) - .then(function() { - return ch.unbindExchange(dest, source, '', {});}) - .then(function() { - // via the no-longer-existing binding - ch.publish(source, '', Buffer.from(viabinding)); - // direct to the queue - ch.sendToQueue(q, Buffer.from(direct)); - return waitForMessages(q);}) - .then(function() {return ch.get(q)}) - .then(function(m) { - // the direct to queue message got through, the via-binding - // message (sent first) did not - assert.equal(direct, m.content.toString()); - }); -}); + // bind again, unbind, publish, get-empty + chtest('unbind exchange', function(ch) { + var source = 'test.unbind-ex-source'; + var dest = 'test.unbind-ex-dest'; + var q = 'test.unbind-ex-queue'; + var viabinding = randomString(); + var direct = randomString(); -// This is a bit convoluted. Sorry. -chtest("cancel consumer", function(ch) { - var q = 'test.consumer-cancel'; - var ctag; - var recv1 = new Promise(function (resolve, reject) { - Promise.join( - ch.assertQueue(q, QUEUE_OPTS), - ch.purgeQueue(q), - // My callback is 'resolve the promise in `arrived`' - ch.consume(q, resolve, {noAck:true}) - .then(function(ok) { - ctag = ok.consumerTag; - ch.sendToQueue(q, Buffer.from('foo')); - })); - }); - - // A message should arrive because of the consume - return recv1.then(function() { - var recv2 = Promise.join( - ch.cancel(ctag).then(function() { - return ch.sendToQueue(q, Buffer.from('bar')); - }), - // but check a message did arrive in the queue - waitForMessages(q)) - .then(function() { - return ch.get(q, {noAck:true}); + return Promise.join(ch.assertExchange(source, 'fanout', EX_OPTS), ch.assertExchange(dest, 'fanout', EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindExchange(dest, source, '', {}), ch.bindQueue(q, dest, '', {})) + .then(function() { + ch.publish(source, '', Buffer.from('foobar')); + return waitForMessages(q); + }) + .then(function() { + // message got through! + return ch.get(q, { noAck: true }).then(function(m) { + assert(m); + }); + }) + .then(function() { + return ch.unbindExchange(dest, source, '', {}); + }) + .then(function() { + // via the no-longer-existing binding + ch.publish(source, '', Buffer.from(viabinding)); + // direct to the queue + ch.sendToQueue(q, Buffer.from(direct)); + return waitForMessages(q); + }) + .then(function() { + return ch.get(q); }) .then(function(m) { - // I'm going to reject it, because I flip succeed/fail - // just below - if (m.content.toString() === 'bar') { - throw new Error(); - } + // the direct to queue message got through, the via-binding + // message (sent first) did not + assert.equal(direct, m.content.toString()); }); + }); + + // This is a bit convoluted. Sorry. + chtest('cancel consumer', function(ch) { + var q = 'test.consumer-cancel'; + var ctag; + var recv1 = new Promise(function(resolve, reject) { + Promise.join( + ch.assertQueue(q, QUEUE_OPTS), + ch.purgeQueue(q), + // My callback is 'resolve the promise in `arrived`' + ch.consume(q, resolve, { noAck: true }).then(function(ok) { + ctag = ok.consumerTag; + ch.sendToQueue(q, Buffer.from('foo')); + }) + ); + }); + + // A message should arrive because of the consume + return recv1.then(function() { + var recv2 = Promise.join( + ch.cancel(ctag).then(function() { + return ch.sendToQueue(q, Buffer.from('bar')); + }), + // but check a message did arrive in the queue + waitForMessages(q) + ) + .then(function() { + return ch.get(q, { noAck: true }); + }) + .then(function(m) { + // I'm going to reject it, because I flip succeed/fail + // just below + if (m.content.toString() === 'bar') { + throw new Error(); + } + }); return expectFail(recv2); + }); }); -}); -chtest("cancelled consumer", function(ch) { - var q = 'test.cancelled-consumer'; - return new Promise(function(resolve, reject) { - return Promise.join( - ch.assertQueue(q), - ch.purgeQueue(q), - ch.consume(q, function(msg) { - if (msg === null) resolve(); - else reject(new Error('Message not expected')); - })) - .then(function() { + chtest('cancelled consumer', function(ch) { + var q = 'test.cancelled-consumer'; + return new Promise(function(resolve, reject) { + return Promise.join( + ch.assertQueue(q), + ch.purgeQueue(q), + ch.consume(q, function(msg) { + if (msg === null) resolve(); + else reject(new Error('Message not expected')); + }) + ).then(function() { return ch.deleteQueue(q); }); + }); }); -}); -// ack, by default, removes a single message from the queue -chtest("ack", function(ch) { - var q = 'test.ack'; - var msg1 = randomString(), msg2 = randomString(); - - return Promise.join( - ch.assertQueue(q, QUEUE_OPTS), - ch.purgeQueue(q)) - .then(function() { - ch.sendToQueue(q, Buffer.from(msg1)); - ch.sendToQueue(q, Buffer.from(msg2)); - return waitForMessages(q, 2); - }) - .then(function() { - return ch.get(q, {noAck: false}) - }) - .then(function(m) { - assert.equal(msg1, m.content.toString()); - ch.ack(m); - // %%% is there a race here? may depend on - // rabbitmq-sepcific semantics - return ch.get(q); - }) - .then(function(m) { - assert(m); - assert.equal(msg2, m.content.toString()); - }); -}); + // ack, by default, removes a single message from the queue + chtest('ack', function(ch) { + var q = 'test.ack'; + var msg1 = randomString(), + msg2 = randomString(); -// Nack, by default, puts a message back on the queue (where in the -// queue is up to the server) -chtest("nack", function(ch) { - var q = 'test.nack'; - var msg1 = randomString(); - - return Promise.join( - ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) - .then(function() { - ch.sendToQueue(q, Buffer.from(msg1)); - return waitForMessages(q);}) - .then(function() { - return ch.get(q, {noAck: false})}) - .then(function(m) { - assert.equal(msg1, m.content.toString()); - ch.nack(m); - return waitForMessages(q);}) - .then(function() { - return ch.get(q);}) - .then(function(m) { - assert(m); - assert.equal(msg1, m.content.toString()); - }); -}); + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) + .then(function() { + ch.sendToQueue(q, Buffer.from(msg1)); + ch.sendToQueue(q, Buffer.from(msg2)); + return waitForMessages(q, 2); + }) + .then(function() { + return ch.get(q, { noAck: false }); + }) + .then(function(m) { + assert.equal(msg1, m.content.toString()); + ch.ack(m); + // %%% is there a race here? may depend on + // rabbitmq-sepcific semantics + return ch.get(q); + }) + .then(function(m) { + assert(m); + assert.equal(msg2, m.content.toString()); + }); + }); -// reject is a near-synonym for nack, the latter of which is not -// available in earlier RabbitMQ (or in AMQP proper). -chtest("reject", function(ch) { - var q = 'test.reject'; - var msg1 = randomString(); - - return Promise.join( - ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) - .then(function() { - ch.sendToQueue(q, Buffer.from(msg1)); - return waitForMessages(q);}) - .then(function() { - return ch.get(q, {noAck: false})}) - .then(function(m) { - assert.equal(msg1, m.content.toString()); - ch.reject(m); - return waitForMessages(q);}) - .then(function() { - return ch.get(q);}) - .then(function(m) { - assert(m); - assert.equal(msg1, m.content.toString()); - }); -}); + // Nack, by default, puts a message back on the queue (where in the + // queue is up to the server) + chtest('nack', function(ch) { + var q = 'test.nack'; + var msg1 = randomString(); -chtest("prefetch", function(ch) { - var q = 'test.prefetch'; - return Promise.join( - ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), - ch.prefetch(1)) - .then(function() { - ch.sendToQueue(q, Buffer.from('foobar')); - ch.sendToQueue(q, Buffer.from('foobar')); - return waitForMessages(q, 2); - }) - .then(function() { - return new Promise(function(resolve) { - var messageCount = 0; - function receive(msg) { - ch.ack(msg); - if (++messageCount > 1) { - resolve(messageCount); - } - } - return ch.consume(q, receive, {noAck: false}) + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) + .then(function() { + ch.sendToQueue(q, Buffer.from(msg1)); + return waitForMessages(q); + }) + .then(function() { + return ch.get(q, { noAck: false }); + }) + .then(function(m) { + assert.equal(msg1, m.content.toString()); + ch.nack(m); + return waitForMessages(q); + }) + .then(function() { + return ch.get(q); + }) + .then(function(m) { + assert(m); + assert.equal(msg1, m.content.toString()); }); - }) - .then(function(c) { - return assert.equal(2, c); - }); -}); + }); -chtest('close', function(ch) { - // Resolving promise guarantees - // channel is closed - return ch.close(); -}); + // reject is a near-synonym for nack, the latter of which is not + // available in earlier RabbitMQ (or in AMQP proper). + chtest('reject', function(ch) { + var q = 'test.reject'; + var msg1 = randomString(); + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) + .then(function() { + ch.sendToQueue(q, Buffer.from(msg1)); + return waitForMessages(q); + }) + .then(function() { + return ch.get(q, { noAck: false }); + }) + .then(function(m) { + assert.equal(msg1, m.content.toString()); + ch.reject(m); + return waitForMessages(q); + }) + .then(function() { + return ch.get(q); + }) + .then(function(m) { + assert(m); + assert.equal(msg1, m.content.toString()); + }); + }); + + chtest('prefetch', function(ch) { + var q = 'test.prefetch'; + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.prefetch(1)) + .then(function() { + ch.sendToQueue(q, Buffer.from('foobar')); + ch.sendToQueue(q, Buffer.from('foobar')); + return waitForMessages(q, 2); + }) + .then(function() { + return new Promise(function(resolve) { + var messageCount = 0; + function receive(msg) { + ch.ack(msg); + if (++messageCount > 1) { + resolve(messageCount); + } + } + return ch.consume(q, receive, { noAck: false }); + }); + }) + .then(function(c) { + return assert.equal(2, c); + }); + }); + + chtest('close', function(ch) { + // Resolving promise guarantees + // channel is closed + return ch.close(); + }); }); var confirmtest = channel_test.bind(null, 'createConfirmChannel'); -suite("confirms", function() { - -confirmtest('message is confirmed', function(ch) { - var q = 'test.confirm-message'; - return Promise.join( - ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) - .then(function() { +suite('confirms', function() { + confirmtest('message is confirmed', function(ch) { + var q = 'test.confirm-message'; + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)).then(function() { return ch.sendToQueue(q, Buffer.from('bleep')); }); -}); + }); -// Usually one can provoke the server into confirming more than one -// message in an ack by simply sending a few messages in quick -// succession; a bit unscientific I know. Luckily we can eavesdrop on -// the acknowledgements coming through to see if we really did get a -// multi-ack. -confirmtest('multiple confirms', function(ch) { - var q = 'test.multiple-confirms'; - return Promise.join( - ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) - .then(function() { + // Usually one can provoke the server into confirming more than one + // message in an ack by simply sending a few messages in quick + // succession; a bit unscientific I know. Luckily we can eavesdrop on + // the acknowledgements coming through to see if we really did get a + // multi-ack. + confirmtest('multiple confirms', function(ch) { + var q = 'test.multiple-confirms'; + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)).then(function() { var multipleRainbows = false; ch.on('ack', function(a) { if (a.multiple) multipleRainbows = true; @@ -556,14 +546,11 @@ confirmtest('multiple confirms', function(ch) { cs.push(conf); } - for (var i=0; i < num; i++) sendAndPushPromise(); + for (var i = 0; i < num; i++) sendAndPushPromise(); return Promise.all(cs).then(function() { if (multipleRainbows) return true; - else if (num > 500) throw new Error( - "Couldn't provoke the server" + - " into multi-acking with " + num + - " messages; giving up"); + else if (num > 500) throw new Error("Couldn't provoke the server" + ' into multi-acking with ' + num + ' messages; giving up'); else { //console.warn("Failed with " + num + "; trying " + num * 2); return prod(num * 2); @@ -572,26 +559,31 @@ confirmtest('multiple confirms', function(ch) { } return prod(5); }); -}); + }); -confirmtest('wait for confirms', function(ch) { - for (var i=0; i < 1000; i++) { - ch.publish('', '', Buffer.from('foobar'), {}); - } - return ch.waitForConfirms(); -}) - -confirmtest('works when channel is closed', function(ch) { - for (var i=0; i < 1000; i++) { - ch.publish('', '', Buffer.from('foobar'), {}); - } - return ch.close().then(function () { - return ch.waitForConfirms() - }).then(function () { - assert.strictEqual(true, false, 'Wait should have failed.') - }, function (e) { - assert.strictEqual(e.message, 'channel closed') + confirmtest('wait for confirms', function(ch) { + for (var i = 0; i < 1000; i++) { + ch.publish('', '', Buffer.from('foobar'), {}); + } + return ch.waitForConfirms(); }); -}); + confirmtest('works when channel is closed', function(ch) { + for (var i = 0; i < 1000; i++) { + ch.publish('', '', Buffer.from('foobar'), {}); + } + return ch + .close() + .then(function() { + return ch.waitForConfirms(); + }) + .then( + function() { + assert.strictEqual(true, false, 'Wait should have failed.'); + }, + function(e) { + assert.strictEqual(e.message, 'channel closed'); + } + ); + }); }); From 9a3f3e7952e2ce5943c8159d7251cd6888aa7c1b Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Sun, 13 Dec 2020 19:57:26 +0000 Subject: [PATCH 04/30] Use pnpm --- Makefile | 4 ++-- pnpm-lock.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 98bd8726..6984aa79 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,7 @@ bin/amqp-rabbitmq-0.9.1.json: curl -L $(AMQP_JSON) > $@ $(ISTANBUL): - npm install + pnpm install $(UGLIFY): - npm install + pnpm install diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d03aa406..6bc85c9a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ devDependencies: istanbul: 0.1.46 mocha: 3.5.3 uglify-js: 2.6.4 -lockfileVersion: 5.1 +lockfileVersion: 5.2 packages: /abbrev/1.0.9: dev: true From 5d6c6ab2fc0920e25a7a952efbbd2d9cac0b467e Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Sun, 13 Dec 2020 19:58:54 +0000 Subject: [PATCH 05/30] Update Promise usage --- channel_api.js | 16 +- examples/tutorials/receive_logs_direct.js | 74 +-- examples/tutorials/receive_logs_topic.js | 69 +-- examples/tutorials/rpc_client.js | 74 +-- lib/callback_model.js | 130 ++--- lib/channel.js | 454 ++++++++--------- lib/channel_model.js | 148 +++--- test/channel.js | 584 +++++++++++----------- test/channel_api.js | 385 +++++++------- test/util.js | 120 ++--- 10 files changed, 1026 insertions(+), 1028 deletions(-) diff --git a/channel_api.js b/channel_api.js index 2aa25614..bc08d82a 100644 --- a/channel_api.js +++ b/channel_api.js @@ -1,22 +1,22 @@ -var raw_connect = require('./lib/connect').connect; -var ChannelModel = require('./lib/channel_model').ChannelModel; +var raw_connect = require("./lib/connect").connect; +var ChannelModel = require("./lib/channel_model").ChannelModel; function connect(url, connOptions) { - var options = { Promise: connOptions.Promise }; + var options = { Promise: (connOptions && connOptions.Promise) || Promise }; - return new options.Promise(function(resolve, reject) { - raw_connect(url, connOptions, function(err, result) { + return new options.Promise(function (resolve, reject) { + raw_connect(url, connOptions, function (err, result) { if (err) { reject(err); } else { resolve(result); } }); - }).then(function(conn) { + }).then(function (conn) { return new ChannelModel(conn, options); }); } module.exports.connect = connect; -module.exports.credentials = require('./lib/credentials'); -module.exports.IllegalOperationError = require('./lib/error').IllegalOperationError; +module.exports.credentials = require("./lib/credentials"); +module.exports.IllegalOperationError = require("./lib/error").IllegalOperationError; diff --git a/examples/tutorials/receive_logs_direct.js b/examples/tutorials/receive_logs_direct.js index 17fc22de..68b0994e 100755 --- a/examples/tutorials/receive_logs_direct.js +++ b/examples/tutorials/receive_logs_direct.js @@ -1,45 +1,51 @@ #!/usr/bin/env node -var amqp = require('amqplib'); -var all = require('bluebird').all; -var basename = require('path').basename; +var amqp = require("amqplib"); +var basename = require("path").basename; var severities = process.argv.slice(2); if (severities.length < 1) { - console.warn('Usage: %s [info] [warning] [error]', - basename(process.argv[1])); + console.warn("Usage: %s [info] [warning] [error]", basename(process.argv[1])); process.exit(1); } -amqp.connect('amqp://localhost').then(function(conn) { - process.once('SIGINT', function() { conn.close(); }); - return conn.createChannel().then(function(ch) { - var ex = 'direct_logs'; - - var ok = ch.assertExchange(ex, 'direct', {durable: false}); - - ok = ok.then(function() { - return ch.assertQueue('', {exclusive: true}); - }); - - ok = ok.then(function(qok) { - var queue = qok.queue; - return all(severities.map(function(sev) { - ch.bindQueue(queue, ex, sev); - })).then(function() { return queue; }); +amqp + .connect("amqp://localhost") + .then(function (conn) { + process.once("SIGINT", function () { + conn.close(); }); - ok = ok.then(function(queue) { - return ch.consume(queue, logMessage, {noAck: true}); - }); - return ok.then(function() { - console.log(' [*] Waiting for logs. To exit press CTRL+C.'); + return conn.createChannel().then(function (ch) { + var ex = "direct_logs"; + + var ok = ch.assertExchange(ex, "direct", { durable: false }); + + ok = ok.then(function () { + return ch.assertQueue("", { exclusive: true }); + }); + + ok = ok.then(function (qok) { + var queue = qok.queue; + return Promise.all( + severities.map(function (sev) { + ch.bindQueue(queue, ex, sev); + }), + ).then(function () { + return queue; + }); + }); + + ok = ok.then(function (queue) { + return ch.consume(queue, logMessage, { noAck: true }); + }); + return ok.then(function () { + console.log(" [*] Waiting for logs. To exit press CTRL+C."); + }); + + function logMessage(msg) { + console.log(" [x] %s:'%s'", msg.fields.routingKey, msg.content.toString()); + } }); - - function logMessage(msg) { - console.log(" [x] %s:'%s'", - msg.fields.routingKey, - msg.content.toString()); - } - }); -}).catch(console.warn); + }) + .catch(console.warn); diff --git a/examples/tutorials/receive_logs_topic.js b/examples/tutorials/receive_logs_topic.js index 3e8eb6f0..cbc7b1fd 100755 --- a/examples/tutorials/receive_logs_topic.js +++ b/examples/tutorials/receive_logs_topic.js @@ -1,44 +1,49 @@ #!/usr/bin/env node -var amqp = require('amqplib'); -var basename = require('path').basename; -var all = require('bluebird').all; +var amqp = require("amqplib"); +var basename = require("path").basename; var keys = process.argv.slice(2); if (keys.length < 1) { - console.log('Usage: %s pattern [pattern...]', - basename(process.argv[1])); + console.log("Usage: %s pattern [pattern...]", basename(process.argv[1])); process.exit(1); } -amqp.connect('amqp://localhost').then(function(conn) { - process.once('SIGINT', function() { conn.close(); }); - return conn.createChannel().then(function(ch) { - var ex = 'topic_logs'; - var ok = ch.assertExchange(ex, 'topic', {durable: false}); - - ok = ok.then(function() { - return ch.assertQueue('', {exclusive: true}); +amqp + .connect("amqp://localhost") + .then(function (conn) { + process.once("SIGINT", function () { + conn.close(); }); + return conn.createChannel().then(function (ch) { + var ex = "topic_logs"; + var ok = ch.assertExchange(ex, "topic", { durable: false }); - ok = ok.then(function(qok) { - var queue = qok.queue; - return all(keys.map(function(rk) { - ch.bindQueue(queue, ex, rk); - })).then(function() { return queue; }); - }); + ok = ok.then(function () { + return ch.assertQueue("", { exclusive: true }); + }); - ok = ok.then(function(queue) { - return ch.consume(queue, logMessage, {noAck: true}); - }); - return ok.then(function() { - console.log(' [*] Waiting for logs. To exit press CTRL+C.'); - }); + ok = ok.then(function (qok) { + var queue = qok.queue; + return Promise.all( + keys.map(function (rk) { + ch.bindQueue(queue, ex, rk); + }), + ).then(function () { + return queue; + }); + }); + + ok = ok.then(function (queue) { + return ch.consume(queue, logMessage, { noAck: true }); + }); + return ok.then(function () { + console.log(" [*] Waiting for logs. To exit press CTRL+C."); + }); - function logMessage(msg) { - console.log(" [x] %s:'%s'", - msg.fields.routingKey, - msg.content.toString()); - } - }); -}).catch(console.warn); + function logMessage(msg) { + console.log(" [x] %s:'%s'", msg.fields.routingKey, msg.content.toString()); + } + }); + }) + .catch(console.warn); diff --git a/examples/tutorials/rpc_client.js b/examples/tutorials/rpc_client.js index 47566b34..4d2d58ab 100755 --- a/examples/tutorials/rpc_client.js +++ b/examples/tutorials/rpc_client.js @@ -1,9 +1,8 @@ #!/usr/bin/env node -var amqp = require('amqplib'); -var basename = require('path').basename; -var Promise = require('bluebird'); -var uuid = require('node-uuid'); +var amqp = require("amqplib"); +var basename = require("path").basename; +var uuid = require("node-uuid"); // I've departed from the form of the original RPC tutorial, which // needlessly introduces a class definition, and doesn't even @@ -11,43 +10,52 @@ var uuid = require('node-uuid'); var n; try { - if (process.argv.length < 3) throw Error('Too few args'); + if (process.argv.length < 3) throw Error("Too few args"); n = parseInt(process.argv[2]); -} -catch (e) { +} catch (e) { console.error(e); - console.warn('Usage: %s number', basename(process.argv[1])); + console.warn("Usage: %s number", basename(process.argv[1])); process.exit(1); } -amqp.connect('amqp://localhost').then(function(conn) { - return conn.createChannel().then(function(ch) { - return new Promise(function(resolve) { - var corrId = uuid(); - function maybeAnswer(msg) { - if (msg.properties.correlationId === corrId) { - resolve(msg.content.toString()); - } - } +amqp + .connect("amqp://localhost") + .then(function (conn) { + return conn + .createChannel() + .then(function (ch) { + return new Promise(function (resolve) { + var corrId = uuid(); + function maybeAnswer(msg) { + if (msg.properties.correlationId === corrId) { + resolve(msg.content.toString()); + } + } - var ok = ch.assertQueue('', {exclusive: true}) - .then(function(qok) { return qok.queue; }); + var ok = ch.assertQueue("", { exclusive: true }).then(function (qok) { + return qok.queue; + }); - ok = ok.then(function(queue) { - return ch.consume(queue, maybeAnswer, {noAck: true}) - .then(function() { return queue; }); - }); + ok = ok.then(function (queue) { + return ch.consume(queue, maybeAnswer, { noAck: true }).then(function () { + return queue; + }); + }); - ok = ok.then(function(queue) { - console.log(' [x] Requesting fib(%d)', n); - ch.sendToQueue('rpc_queue', Buffer.from(n.toString()), { - correlationId: corrId, replyTo: queue + ok = ok.then(function (queue) { + console.log(" [x] Requesting fib(%d)", n); + ch.sendToQueue("rpc_queue", Buffer.from(n.toString()), { + correlationId: corrId, + replyTo: queue, + }); + }); }); + }) + .then(function (fibN) { + console.log(" [.] Got %d", fibN); + }) + .finally(function () { + conn.close(); }); - }); - }) - .then(function(fibN) { - console.log(' [.] Got %d', fibN); }) - .finally(function() { conn.close(); }); -}).catch(console.warn); + .catch(console.warn); diff --git a/lib/callback_model.js b/lib/callback_model.js index bbf38e7d..a25ff375 100644 --- a/lib/callback_model.js +++ b/lib/callback_model.js @@ -2,22 +2,22 @@ // // -'use strict'; +"use strict"; -var defs = require('./defs'); -var inherits = require('util').inherits; -var EventEmitter = require('events').EventEmitter; -var BaseChannel = require('./channel').BaseChannel; -var acceptMessage = require('./channel').acceptMessage; -var Args = require('./api_args'); +var defs = require("./defs"); +var inherits = require("util").inherits; +var EventEmitter = require("events").EventEmitter; +var BaseChannel = require("./channel").BaseChannel; +var acceptMessage = require("./channel").acceptMessage; +var Args = require("./api_args"); function CallbackModel(connection, options) { if (!(this instanceof CallbackModel)) return new CallbackModel(connection); EventEmitter.call(this); this.connection = connection; - this.Promise = options; + this.Promise = options || Promise; var self = this; - ['error', 'close', 'blocked', 'unblocked'].forEach(function(ev) { + ["error", "close", "blocked", "unblocked"].forEach(function (ev) { connection.on(ev, self.emit.bind(self, ev)); }); } @@ -25,22 +25,22 @@ inherits(CallbackModel, EventEmitter); module.exports.CallbackModel = CallbackModel; -CallbackModel.prototype.close = function(cb) { +CallbackModel.prototype.close = function (cb) { this.connection.close(cb); }; function Channel(connection) { BaseChannel.call(this, connection); - this.on('delivery', this.handleDelivery.bind(this)); - this.on('cancel', this.handleCancel.bind(this)); + this.on("delivery", this.handleDelivery.bind(this)); + this.on("cancel", this.handleCancel.bind(this)); } inherits(Channel, BaseChannel); module.exports.Channel = Channel; -CallbackModel.prototype.createChannel = function(cb) { +CallbackModel.prototype.createChannel = function (cb) { var ch = new Channel(this.connection); - ch.open(function(err, ok) { + ch.open(function (err, ok) { if (err === null) cb && cb(null, ch); else cb && cb(err); }); @@ -54,12 +54,12 @@ CallbackModel.prototype.createChannel = function(cb) { // is optional (that is, most of them). function callbackWrapper(ch, cb) { return cb - ? function(err, ok) { + ? function (err, ok) { if (err === null) { cb(null, ok); } else cb(err); } - : function() {}; + : function () {}; } // This encodes straight-forward RPC: no side-effects and return the @@ -68,9 +68,9 @@ function callbackWrapper(ch, cb) { // needs to have side-effects, or needs to change the server response, // use `#_rpc(...)` and remember to dereference `.fields` of the // server response. -Channel.prototype.rpc = function(method, fields, expect, cb0) { +Channel.prototype.rpc = function (method, fields, expect, cb0) { var cb = callbackWrapper(this, cb0); - this._rpc(method, fields, expect, function(err, ok) { + this._rpc(method, fields, expect, function (err, ok) { cb(err, ok && ok.fields); // in case of an error, ok will be // undefined }); @@ -79,84 +79,84 @@ Channel.prototype.rpc = function(method, fields, expect, cb0) { // === Public API === -Channel.prototype.open = function(cb) { +Channel.prototype.open = function (cb) { try { this.allocate(); } catch (e) { return cb(e); } - return this.rpc(defs.ChannelOpen, { outOfBand: '' }, defs.ChannelOpenOk, cb); + return this.rpc(defs.ChannelOpen, { outOfBand: "" }, defs.ChannelOpenOk, cb); }; -Channel.prototype.close = function(cb) { - return this.closeBecause('Goodbye', defs.constants.REPLY_SUCCESS, function() { +Channel.prototype.close = function (cb) { + return this.closeBecause("Goodbye", defs.constants.REPLY_SUCCESS, function () { cb && cb(null); }); }; -Channel.prototype.assertQueue = function(queue, options, cb) { +Channel.prototype.assertQueue = function (queue, options, cb) { return this.rpc(defs.QueueDeclare, Args.assertQueue(queue, options), defs.QueueDeclareOk, cb); }; -Channel.prototype.checkQueue = function(queue, cb) { +Channel.prototype.checkQueue = function (queue, cb) { return this.rpc(defs.QueueDeclare, Args.checkQueue(queue), defs.QueueDeclareOk, cb); }; -Channel.prototype.deleteQueue = function(queue, options, cb) { +Channel.prototype.deleteQueue = function (queue, options, cb) { return this.rpc(defs.QueueDelete, Args.deleteQueue(queue, options), defs.QueueDeleteOk, cb); }; -Channel.prototype.purgeQueue = function(queue, cb) { +Channel.prototype.purgeQueue = function (queue, cb) { return this.rpc(defs.QueuePurge, Args.purgeQueue(queue), defs.QueuePurgeOk, cb); }; -Channel.prototype.bindQueue = function(queue, source, pattern, argt, cb) { +Channel.prototype.bindQueue = function (queue, source, pattern, argt, cb) { return this.rpc(defs.QueueBind, Args.bindQueue(queue, source, pattern, argt), defs.QueueBindOk, cb); }; -Channel.prototype.unbindQueue = function(queue, source, pattern, argt, cb) { +Channel.prototype.unbindQueue = function (queue, source, pattern, argt, cb) { return this.rpc(defs.QueueUnbind, Args.unbindQueue(queue, source, pattern, argt), defs.QueueUnbindOk, cb); }; -Channel.prototype.assertExchange = function(ex, type, options, cb0) { +Channel.prototype.assertExchange = function (ex, type, options, cb0) { var cb = callbackWrapper(this, cb0); - this._rpc(defs.ExchangeDeclare, Args.assertExchange(ex, type, options), defs.ExchangeDeclareOk, function(e, _) { + this._rpc(defs.ExchangeDeclare, Args.assertExchange(ex, type, options), defs.ExchangeDeclareOk, function (e, _) { cb(e, { exchange: ex }); }); return this; }; -Channel.prototype.checkExchange = function(exchange, cb) { +Channel.prototype.checkExchange = function (exchange, cb) { return this.rpc(defs.ExchangeDeclare, Args.checkExchange(exchange), defs.ExchangeDeclareOk, cb); }; -Channel.prototype.deleteExchange = function(exchange, options, cb) { +Channel.prototype.deleteExchange = function (exchange, options, cb) { return this.rpc(defs.ExchangeDelete, Args.deleteExchange(exchange, options), defs.ExchangeDeleteOk, cb); }; -Channel.prototype.bindExchange = function(dest, source, pattern, argt, cb) { +Channel.prototype.bindExchange = function (dest, source, pattern, argt, cb) { return this.rpc(defs.ExchangeBind, Args.bindExchange(dest, source, pattern, argt), defs.ExchangeBindOk, cb); }; -Channel.prototype.unbindExchange = function(dest, source, pattern, argt, cb) { +Channel.prototype.unbindExchange = function (dest, source, pattern, argt, cb) { return this.rpc(defs.ExchangeUnbind, Args.unbindExchange(dest, source, pattern, argt), defs.ExchangeUnbindOk, cb); }; -Channel.prototype.publish = function(exchange, routingKey, content, options) { +Channel.prototype.publish = function (exchange, routingKey, content, options) { var fieldsAndProps = Args.publish(exchange, routingKey, options); return this.sendMessage(fieldsAndProps, fieldsAndProps, content); }; -Channel.prototype.sendToQueue = function(queue, content, options) { - return this.publish('', queue, content, options); +Channel.prototype.sendToQueue = function (queue, content, options) { + return this.publish("", queue, content, options); }; -Channel.prototype.consume = function(queue, callback, options, cb0) { +Channel.prototype.consume = function (queue, callback, options, cb0) { var cb = callbackWrapper(this, cb0); var fields = Args.consume(queue, options); var self = this; - this._rpc(defs.BasicConsume, fields, defs.BasicConsumeOk, function(err, ok) { + this._rpc(defs.BasicConsume, fields, defs.BasicConsumeOk, function (err, ok) { if (err === null) { self.registerConsumer(ok.fields.consumerTag, callback); cb(null, ok.fields); @@ -165,10 +165,10 @@ Channel.prototype.consume = function(queue, callback, options, cb0) { return this; }; -Channel.prototype.cancel = function(consumerTag, cb0) { +Channel.prototype.cancel = function (consumerTag, cb0) { var cb = callbackWrapper(this, cb0); var self = this; - this._rpc(defs.BasicCancel, Args.cancel(consumerTag), defs.BasicCancelOk, function(err, ok) { + this._rpc(defs.BasicCancel, Args.cancel(consumerTag), defs.BasicCancelOk, function (err, ok) { if (err === null) { self.unregisterConsumer(consumerTag); cb(null, ok.fields); @@ -177,57 +177,57 @@ Channel.prototype.cancel = function(consumerTag, cb0) { return this; }; -Channel.prototype.get = function(queue, options, cb0) { +Channel.prototype.get = function (queue, options, cb0) { var self = this; var fields = Args.get(queue, options); var cb = callbackWrapper(this, cb0); - this.sendOrEnqueue(defs.BasicGet, fields, function(err, f) { + this.sendOrEnqueue(defs.BasicGet, fields, function (err, f) { if (err === null) { if (f.id === defs.BasicGetEmpty) { cb(null, false); } else if (f.id === defs.BasicGetOk) { - self.handleMessage = acceptMessage(function(m) { + self.handleMessage = acceptMessage(function (m) { m.fields = f.fields; cb(null, m); }); } else { - cb(new Error('Unexpected response to BasicGet: ' + inspect(f))); + cb(new Error("Unexpected response to BasicGet: " + inspect(f))); } } }); return this; }; -Channel.prototype.ack = function(message, allUpTo) { +Channel.prototype.ack = function (message, allUpTo) { this.sendImmediately(defs.BasicAck, Args.ack(message.fields.deliveryTag, allUpTo)); return this; }; -Channel.prototype.ackAll = function() { +Channel.prototype.ackAll = function () { this.sendImmediately(defs.BasicAck, Args.ack(0, true)); return this; }; -Channel.prototype.nack = function(message, allUpTo, requeue) { +Channel.prototype.nack = function (message, allUpTo, requeue) { this.sendImmediately(defs.BasicNack, Args.nack(message.fields.deliveryTag, allUpTo, requeue)); return this; }; -Channel.prototype.nackAll = function(requeue) { +Channel.prototype.nackAll = function (requeue) { this.sendImmediately(defs.BasicNack, Args.nack(0, true, requeue)); return this; }; -Channel.prototype.reject = function(message, requeue) { +Channel.prototype.reject = function (message, requeue) { this.sendImmediately(defs.BasicReject, Args.reject(message.fields.deliveryTag, requeue)); return this; }; -Channel.prototype.prefetch = function(count, global, cb) { +Channel.prototype.prefetch = function (count, global, cb) { return this.rpc(defs.BasicQos, Args.prefetch(count, global), defs.BasicQosOk, cb); }; -Channel.prototype.recover = function(cb) { +Channel.prototype.recover = function (cb) { return this.rpc(defs.BasicRecover, Args.recover(), defs.BasicRecoverOk, cb); }; @@ -238,12 +238,12 @@ inherits(ConfirmChannel, Channel); module.exports.ConfirmChannel = ConfirmChannel; -CallbackModel.prototype.createConfirmChannel = function(cb) { +CallbackModel.prototype.createConfirmChannel = function (cb) { var ch = new ConfirmChannel(this.connection); - ch.open(function(err) { + ch.open(function (err) { if (err !== null) return cb && cb(err); else { - ch.rpc(defs.ConfirmSelect, { nowait: false }, defs.ConfirmSelectOk, function(err, _ok) { + ch.rpc(defs.ConfirmSelect, { nowait: false }, defs.ConfirmSelectOk, function (err, _ok) { if (err !== null) return cb && cb(err); else cb && cb(null, ch); }); @@ -252,24 +252,24 @@ CallbackModel.prototype.createConfirmChannel = function(cb) { return ch; }; -ConfirmChannel.prototype.publish = function(exchange, routingKey, content, options, cb) { +ConfirmChannel.prototype.publish = function (exchange, routingKey, content, options, cb) { this.pushConfirmCallback(cb); return Channel.prototype.publish.call(this, exchange, routingKey, content, options); }; -ConfirmChannel.prototype.sendToQueue = function(queue, content, options, cb) { - return this.publish('', queue, content, options, cb); +ConfirmChannel.prototype.sendToQueue = function (queue, content, options, cb) { + return this.publish("", queue, content, options, cb); }; -ConfirmChannel.prototype.waitForConfirms = function(k) { +ConfirmChannel.prototype.waitForConfirms = function (k) { var awaiting = []; var unconfirmed = this.unconfirmed; - unconfirmed.forEach(function(val, index) { + unconfirmed.forEach(function (val, index) { if (val === null); else { // already confirmed - var confirmed = new this.Promise(function(resolve, reject) { - unconfirmed[index] = function(err) { + var confirmed = new this.Promise(function (resolve, reject) { + unconfirmed[index] = function (err) { if (val) val(err); if (err === null) resolve(); else reject(err); @@ -279,11 +279,11 @@ ConfirmChannel.prototype.waitForConfirms = function(k) { } }); return this.Promise.all(awaiting).then( - function() { + function () { k(); }, - function(err) { + function (err) { k(err); - } + }, ); }; diff --git a/lib/channel.js b/lib/channel.js index 2216a089..71bd13c4 100644 --- a/lib/channel.js +++ b/lib/channel.js @@ -4,62 +4,62 @@ // Channel machinery. -'use strict' - -var defs = require('./defs') -var closeMsg = require('./format').closeMessage -var inspect = require('./format').inspect -var methodName = require('./format').methodName -var assert = require('assert') -var inherits = require('util').inherits -var EventEmitter = require('events').EventEmitter -var fmt = require('util').format -var IllegalOperationError = require('./error').IllegalOperationError -var stackCapture = require('./error').stackCapture -var Buffer = require('safe-buffer').Buffer +"use strict"; + +var defs = require("./defs"); +var closeMsg = require("./format").closeMessage; +var inspect = require("./format").inspect; +var methodName = require("./format").methodName; +var assert = require("assert"); +var inherits = require("util").inherits; +var EventEmitter = require("events").EventEmitter; +var fmt = require("util").format; +var IllegalOperationError = require("./error").IllegalOperationError; +var stackCapture = require("./error").stackCapture; +var Buffer = require("safe-buffer").Buffer; function Channel(connection, options) { - EventEmitter.call(this) - this.Promise = options.Promise - this.connection = connection + EventEmitter.call(this); + this.Promise = (options && options.Promise) || Promise; + this.connection = connection; // for the presently outstanding RPC - this.reply = null + this.reply = null; // for the RPCs awaiting action - this.pending = [] + this.pending = []; // for unconfirmed messages - this.lwm = 1 // the least, unconfirmed deliveryTag - this.unconfirmed = [] // rolling window of delivery callbacks + this.lwm = 1; // the least, unconfirmed deliveryTag + this.unconfirmed = []; // rolling window of delivery callbacks this.on( - 'ack', - this.handleConfirm.bind(this, function(cb) { - if (cb) cb(null) - }) - ) + "ack", + this.handleConfirm.bind(this, function (cb) { + if (cb) cb(null); + }), + ); this.on( - 'nack', - this.handleConfirm.bind(this, function(cb) { - if (cb) cb(new Error('message nacked')) - }) - ) - this.on('close', function() { - var cb + "nack", + this.handleConfirm.bind(this, function (cb) { + if (cb) cb(new Error("message nacked")); + }), + ); + this.on("close", function () { + var cb; while ((cb = this.unconfirmed.shift())) { - if (cb) cb(new Error('channel closed')) + if (cb) cb(new Error("channel closed")); } - }) + }); // message frame state machine - this.handleMessage = acceptDeliveryOrReturn + this.handleMessage = acceptDeliveryOrReturn; } -inherits(Channel, EventEmitter) +inherits(Channel, EventEmitter); -module.exports.Channel = Channel -module.exports.acceptMessage = acceptMessage +module.exports.Channel = Channel; +module.exports.acceptMessage = acceptMessage; -var C = Channel.prototype +var C = Channel.prototype; -C.allocate = function() { - this.ch = this.connection.freshChannel(this) - return this -} +C.allocate = function () { + this.ch = this.connection.freshChannel(this); + return this; +}; // Incoming frames are either notifications of e.g., message delivery, // or replies to something we've sent. In general I deal with the @@ -73,67 +73,67 @@ C.allocate = function() { // reply. // Just send the damn frame. -C.sendImmediately = function(method, fields) { - return this.connection.sendMethod(this.ch, method, fields) -} +C.sendImmediately = function (method, fields) { + return this.connection.sendMethod(this.ch, method, fields); +}; // Invariant: !this.reply -> pending.length == 0. That is, whenever we // clear a reply, we must send another RPC (and thereby fill // this.reply) if there is one waiting. The invariant relevant here // and in `accept`. -C.sendOrEnqueue = function(method, fields, reply) { +C.sendOrEnqueue = function (method, fields, reply) { if (!this.reply) { // if no reply waiting, we can go - assert(this.pending.length === 0) - this.reply = reply - this.sendImmediately(method, fields) + assert(this.pending.length === 0); + this.reply = reply; + this.sendImmediately(method, fields); } else { - this.pending.push({ method: method, fields: fields, reply: reply }) + this.pending.push({ method: method, fields: fields, reply: reply }); } -} +}; -C.sendMessage = function(fields, properties, content) { - return this.connection.sendMessage(this.ch, defs.BasicPublish, fields, defs.BasicProperties, properties, content) -} +C.sendMessage = function (fields, properties, content) { + return this.connection.sendMessage(this.ch, defs.BasicPublish, fields, defs.BasicProperties, properties, content); +}; // Internal, synchronously resolved RPC; the return value is resolved // with the whole frame. -C._rpc = function(method, fields, expect, cb) { - var self = this +C._rpc = function (method, fields, expect, cb) { + var self = this; function reply(err, f) { if (err === null) { if (f.id === expect) { - return cb(null, f) + return cb(null, f); } else { // We have detected a problem, so it's up to us to close the // channel - var expectedName = methodName(expect) + var expectedName = methodName(expect); - var e = new Error(fmt('Expected %s; got %s', expectedName, inspect(f, false))) - self.closeWithError(f.id, fmt('Expected %s; got %s', expectedName, methodName(f.id)), defs.constants.UNEXPECTED_FRAME, e) - return cb(e) + var e = new Error(fmt("Expected %s; got %s", expectedName, inspect(f, false))); + self.closeWithError(f.id, fmt("Expected %s; got %s", expectedName, methodName(f.id)), defs.constants.UNEXPECTED_FRAME, e); + return cb(e); } } // An error will be given if, for example, this is waiting to be // sent and the connection closes - else if (err instanceof Error) return cb(err) + else if (err instanceof Error) return cb(err); // A close frame will be given if this is the RPC awaiting reply // and the channel is closed by the server else { // otherwise, it's a close frame - var closeReason = (err.fields.classId << 16) + err.fields.methodId - var e = method === closeReason ? fmt('Operation failed: %s; %s', methodName(method), closeMsg(err)) : fmt('Channel closed by server: %s', closeMsg(err)) - var closeFrameError = new Error(e) - closeFrameError.code = err.fields.replyCode - closeFrameError.classId = err.fields.classId - closeFrameError.methodId = err.fields.methodId - return cb(closeFrameError) + var closeReason = (err.fields.classId << 16) + err.fields.methodId; + var e = method === closeReason ? fmt("Operation failed: %s; %s", methodName(method), closeMsg(err)) : fmt("Channel closed by server: %s", closeMsg(err)); + var closeFrameError = new Error(e); + closeFrameError.code = err.fields.replyCode; + closeFrameError.classId = err.fields.classId; + closeFrameError.methodId = err.fields.methodId; + return cb(closeFrameError); } } - this.sendOrEnqueue(method, fields, reply) -} + this.sendOrEnqueue(method, fields, reply); +}; // Shutdown protocol. There's three scenarios: // @@ -149,82 +149,82 @@ C._rpc = function(method, fields, expect, cb) { // the exchange. function invalidOp(msg, stack) { - return function() { - throw new IllegalOperationError(msg, stack) - } + return function () { + throw new IllegalOperationError(msg, stack); + }; } function invalidateSend(ch, msg, stack) { - ch.sendImmediately = ch.sendOrEnqueue = ch.sendMessage = invalidOp(msg, stack) + ch.sendImmediately = ch.sendOrEnqueue = ch.sendMessage = invalidOp(msg, stack); } // Move to entirely closed state. -C.toClosed = function(capturedStack) { - this._rejectPending() - invalidateSend(this, 'Channel closed', capturedStack) - this.accept = invalidOp('Channel closed', capturedStack) - this.connection.releaseChannel(this.ch) - this.emit('close') -} +C.toClosed = function (capturedStack) { + this._rejectPending(); + invalidateSend(this, "Channel closed", capturedStack); + this.accept = invalidOp("Channel closed", capturedStack); + this.connection.releaseChannel(this.ch); + this.emit("close"); +}; // Stop being able to send and receive methods and content. Used when // we close the channel. Invokes the continuation once the server has // acknowledged the close, but before the channel is moved to the // closed state. -C.toClosing = function(capturedStack, k) { - var send = this.sendImmediately.bind(this) - invalidateSend(this, 'Channel closing', capturedStack) +C.toClosing = function (capturedStack, k) { + var send = this.sendImmediately.bind(this); + invalidateSend(this, "Channel closing", capturedStack); - this.accept = function(f) { + this.accept = function (f) { if (f.id === defs.ChannelCloseOk) { - if (k) k() - var s = stackCapture('ChannelCloseOk frame received') - this.toClosed(s) + if (k) k(); + var s = stackCapture("ChannelCloseOk frame received"); + this.toClosed(s); } else if (f.id === defs.ChannelClose) { - send(defs.ChannelCloseOk, {}) + send(defs.ChannelCloseOk, {}); } // else ignore frame - } -} + }; +}; -C._rejectPending = function() { +C._rejectPending = function () { function rej(r) { - r(new Error('Channel ended, no reply will be forthcoming')) + r(new Error("Channel ended, no reply will be forthcoming")); } - if (this.reply !== null) rej(this.reply) - this.reply = null + if (this.reply !== null) rej(this.reply); + this.reply = null; - var discard - while ((discard = this.pending.shift())) rej(discard.reply) - this.pending = null // so pushes will break -} + var discard; + while ((discard = this.pending.shift())) rej(discard.reply); + this.pending = null; // so pushes will break +}; -C.closeBecause = function(reason, code, k) { +C.closeBecause = function (reason, code, k) { this.sendImmediately(defs.ChannelClose, { replyText: reason, replyCode: code, methodId: 0, - classId: 0 - }) - var s = stackCapture('closeBecause called: ' + reason) - this.toClosing(s, k) -} + classId: 0, + }); + var s = stackCapture("closeBecause called: " + reason); + this.toClosing(s, k); +}; // If we close because there's been an error, we need to distinguish // between what we tell the server (`reason`) and what we report as // the cause in the client (`error`). -C.closeWithError = function(id, reason, code, error) { - var self = this - this.closeBecause(reason, code, function() { - error.code = code +C.closeWithError = function (id, reason, code, error) { + var self = this; + this.closeBecause(reason, code, function () { + error.code = code; // content frames and consumer errors do not provide a method a class/method ID if (id) { - error.classId = defs.info(id).classId - error.methodId = defs.info(id).methodId + error.classId = defs.info(id).classId; + error.methodId = defs.info(id).methodId; } - self.emit('error', error) - }) -} + self.emit("error", error); + }); +}; // A trampolining state machine for message frames on a channel. A // message arrives in at least two frames: first, a method announcing @@ -234,67 +234,67 @@ C.closeWithError = function(id, reason, code, error) { // Keep the try/catch localised, in an attempt to avoid disabling // optimisation -C.acceptMessageFrame = function(f) { +C.acceptMessageFrame = function (f) { try { - this.handleMessage = this.handleMessage(f) + this.handleMessage = this.handleMessage(f); } catch (msg) { - if (typeof msg === 'string') { - this.closeWithError(f.id, msg, defs.constants.UNEXPECTED_FRAME, new Error(msg)) + if (typeof msg === "string") { + this.closeWithError(f.id, msg, defs.constants.UNEXPECTED_FRAME, new Error(msg)); } else if (msg instanceof Error) { - this.closeWithError(f.id, 'Error while processing message', defs.constants.INTERNAL_ERROR, msg) + this.closeWithError(f.id, "Error while processing message", defs.constants.INTERNAL_ERROR, msg); } else { - this.closeWithError(f.id, 'Internal error while processing message', defs.constants.INTERNAL_ERROR, new Error(msg.toString())) + this.closeWithError(f.id, "Internal error while processing message", defs.constants.INTERNAL_ERROR, new Error(msg.toString())); } } -} +}; // Kick off a message delivery given a BasicDeliver or BasicReturn // frame (BasicGet uses the RPC mechanism) function acceptDeliveryOrReturn(f) { - var event - if (f.id === defs.BasicDeliver) event = 'delivery' - else if (f.id === defs.BasicReturn) event = 'return' - else throw fmt('Expected BasicDeliver or BasicReturn; got %s', inspect(f)) - - var self = this - var fields = f.fields - return acceptMessage(function(message) { - message.fields = fields - self.emit(event, message) - }) + var event; + if (f.id === defs.BasicDeliver) event = "delivery"; + else if (f.id === defs.BasicReturn) event = "return"; + else throw fmt("Expected BasicDeliver or BasicReturn; got %s", inspect(f)); + + var self = this; + var fields = f.fields; + return acceptMessage(function (message) { + message.fields = fields; + self.emit(event, message); + }); } // Move to the state of waiting for message frames (headers, then // one or more content frames) function acceptMessage(continuation) { var totalSize = 0, - remaining = 0 - var buffers = null + remaining = 0; + var buffers = null; var message = { fields: null, properties: null, - content: null - } + content: null, + }; - return headers + return headers; // expect a headers frame function headers(f) { if (f.id === defs.BasicProperties) { - message.properties = f.fields - totalSize = remaining = f.size + message.properties = f.fields; + totalSize = remaining = f.size; // for zero-length messages, content frames aren't required. if (totalSize === 0) { - message.content = Buffer.alloc(0) - continuation(message) - return acceptDeliveryOrReturn + message.content = Buffer.alloc(0); + continuation(message); + return acceptDeliveryOrReturn; } else { - return content + return content; } } else { - throw 'Expected headers frame after delivery' + throw "Expected headers frame after delivery"; } } @@ -302,168 +302,168 @@ function acceptMessage(continuation) { // %%% TODO cancelled messages (sent as zero-length content frame) function content(f) { if (f.content) { - var size = f.content.length - remaining -= size + var size = f.content.length; + remaining -= size; if (remaining === 0) { if (buffers !== null) { - buffers.push(f.content) - message.content = Buffer.concat(buffers) + buffers.push(f.content); + message.content = Buffer.concat(buffers); } else { - message.content = f.content + message.content = f.content; } - continuation(message) - return acceptDeliveryOrReturn + continuation(message); + return acceptDeliveryOrReturn; } else if (remaining < 0) { - throw fmt('Too much content sent! Expected %d bytes', totalSize) + throw fmt("Too much content sent! Expected %d bytes", totalSize); } else { - if (buffers !== null) buffers.push(f.content) - else buffers = [f.content] - return content + if (buffers !== null) buffers.push(f.content); + else buffers = [f.content]; + return content; } - } else throw 'Expected content frame after headers' + } else throw "Expected content frame after headers"; } } -C.handleConfirm = function(handle, f) { - var tag = f.deliveryTag - var multi = f.multiple +C.handleConfirm = function (handle, f) { + var tag = f.deliveryTag; + var multi = f.multiple; if (multi) { - var confirmed = this.unconfirmed.splice(0, tag - this.lwm + 1) - this.lwm = tag + 1 - confirmed.forEach(handle) + var confirmed = this.unconfirmed.splice(0, tag - this.lwm + 1); + this.lwm = tag + 1; + confirmed.forEach(handle); } else { - var c + var c; if (tag === this.lwm) { - c = this.unconfirmed.shift() - this.lwm++ + c = this.unconfirmed.shift(); + this.lwm++; // Advance the LWM and the window to the next non-gap, or // possibly to the end while (this.unconfirmed[0] === null) { - this.unconfirmed.shift() - this.lwm++ + this.unconfirmed.shift(); + this.lwm++; } } else { - c = this.unconfirmed[tag - this.lwm] - this.unconfirmed[tag - this.lwm] = null + c = this.unconfirmed[tag - this.lwm]; + this.unconfirmed[tag - this.lwm] = null; } // Technically, in the single-deliveryTag case, I should report a // protocol breach if it's already been confirmed. - handle(c) + handle(c); } -} +}; -C.pushConfirmCallback = function(cb) { +C.pushConfirmCallback = function (cb) { // `null` is used specifically for marking already confirmed slots, // so I coerce `undefined` and `null` to false; functions are never // falsey. - this.unconfirmed.push(cb || false) -} + this.unconfirmed.push(cb || false); +}; // Interface for connection to use -C.accept = function(f) { +C.accept = function (f) { switch (f.id) { // Message frames case undefined: // content frame! case defs.BasicDeliver: case defs.BasicReturn: case defs.BasicProperties: - return this.acceptMessageFrame(f) + return this.acceptMessageFrame(f); // confirmations, need to do confirm.select first case defs.BasicAck: - return this.emit('ack', f.fields) + return this.emit("ack", f.fields); case defs.BasicNack: - return this.emit('nack', f.fields) + return this.emit("nack", f.fields); case defs.BasicCancel: // The broker can send this if e.g., the queue is deleted. - return this.emit('cancel', f.fields) + return this.emit("cancel", f.fields); case defs.ChannelClose: // Any remote closure is an error to us. Reject the pending reply // with the close frame, so it can see whether it was that // operation that caused it to close. if (this.reply) { - var reply = this.reply - this.reply = null - reply(f) + var reply = this.reply; + this.reply = null; + reply(f); } - var emsg = 'Channel closed by server: ' + closeMsg(f) - this.sendImmediately(defs.ChannelCloseOk, {}) + var emsg = "Channel closed by server: " + closeMsg(f); + this.sendImmediately(defs.ChannelCloseOk, {}); - var error = new Error(emsg) - error.code = f.fields.replyCode - error.classId = f.fields.classId - error.methodId = f.fields.methodId - this.emit('error', error) + var error = new Error(emsg); + error.code = f.fields.replyCode; + error.classId = f.fields.classId; + error.methodId = f.fields.methodId; + this.emit("error", error); - var s = stackCapture(emsg) - this.toClosed(s) - return + var s = stackCapture(emsg); + this.toClosed(s); + return; case defs.BasicFlow: // RabbitMQ doesn't send this, it just blocks the TCP socket - return this.closeWithError(f.id, 'Flow not implemented', defs.constants.NOT_IMPLEMENTED, new Error('Flow not implemented')) + return this.closeWithError(f.id, "Flow not implemented", defs.constants.NOT_IMPLEMENTED, new Error("Flow not implemented")); default: // assume all other things are replies // Resolving the reply may lead to another RPC; to make sure we // don't hold that up, clear this.reply - var reply = this.reply - this.reply = null + var reply = this.reply; + this.reply = null; // however, maybe there's an RPC waiting to go? If so, that'll // fill this.reply again, restoring the invariant. This does rely // on any response being recv'ed after resolving the promise, // below; hence, I use synchronous defer. if (this.pending.length > 0) { - var send = this.pending.shift() - this.reply = send.reply - this.sendImmediately(send.method, send.fields) + var send = this.pending.shift(); + this.reply = send.reply; + this.sendImmediately(send.method, send.fields); } - return reply(null, f) + return reply(null, f); } -} +}; -C.onBufferDrain = function() { - this.emit('drain') -} +C.onBufferDrain = function () { + this.emit("drain"); +}; // This adds just a bit more stuff useful for the APIs, but not // low-level machinery. function BaseChannel(connection, options) { - Channel.call(this, connection, options) - this.consumers = {} + Channel.call(this, connection, options); + this.consumers = {}; } -inherits(BaseChannel, Channel) +inherits(BaseChannel, Channel); -module.exports.BaseChannel = BaseChannel +module.exports.BaseChannel = BaseChannel; // Not sure I like the ff, it's going to be changing hidden classes // all over the place. On the other hand, whaddya do. -BaseChannel.prototype.registerConsumer = function(tag, callback) { - this.consumers[tag] = callback -} +BaseChannel.prototype.registerConsumer = function (tag, callback) { + this.consumers[tag] = callback; +}; -BaseChannel.prototype.unregisterConsumer = function(tag) { - delete this.consumers[tag] -} +BaseChannel.prototype.unregisterConsumer = function (tag) { + delete this.consumers[tag]; +}; -BaseChannel.prototype.dispatchMessage = function(fields, message) { - var consumerTag = fields.consumerTag - var consumer = this.consumers[consumerTag] +BaseChannel.prototype.dispatchMessage = function (fields, message) { + var consumerTag = fields.consumerTag; + var consumer = this.consumers[consumerTag]; if (consumer) { - return consumer(message) + return consumer(message); } else { // %%% Surely a race here - throw new Error('Unknown consumer: ' + consumerTag) + throw new Error("Unknown consumer: " + consumerTag); } -} +}; -BaseChannel.prototype.handleDelivery = function(message) { - return this.dispatchMessage(message.fields, message) -} +BaseChannel.prototype.handleDelivery = function (message) { + return this.dispatchMessage(message.fields, message); +}; -BaseChannel.prototype.handleCancel = function(fields) { - return this.dispatchMessage(fields, null) -} +BaseChannel.prototype.handleCancel = function (fields) { + return this.dispatchMessage(fields, null); +}; diff --git a/lib/channel_model.js b/lib/channel_model.js index 78e6685a..2fd06a3c 100644 --- a/lib/channel_model.js +++ b/lib/channel_model.js @@ -2,22 +2,22 @@ // // -'use strict'; +"use strict"; -var defs = require('./defs'); -var inherits = require('util').inherits; -var EventEmitter = require('events').EventEmitter; -var BaseChannel = require('./channel').BaseChannel; -var acceptMessage = require('./channel').acceptMessage; -var Args = require('./api_args'); +var defs = require("./defs"); +var inherits = require("util").inherits; +var EventEmitter = require("events").EventEmitter; +var BaseChannel = require("./channel").BaseChannel; +var acceptMessage = require("./channel").acceptMessage; +var Args = require("./api_args"); function ChannelModel(connection, options) { if (!(this instanceof ChannelModel)) return new ChannelModel(connection); EventEmitter.call(this); this.connection = connection; - this.Promise = options.Promise; + this.Promise = (options && options.Promise) || Promise; var self = this; - ['error', 'close', 'blocked', 'unblocked'].forEach(function(ev) { + ["error", "close", "blocked", "unblocked"].forEach(function (ev) { connection.on(ev, self.emit.bind(self, ev)); }); } @@ -27,10 +27,10 @@ module.exports.ChannelModel = ChannelModel; var CM = ChannelModel.prototype; -CM.close = function() { +CM.close = function () { var close = this.connection.close.bind(this.connection); - return new this.Promise(function(resolve, reject) { - close(function(err, result) { + return new this.Promise(function (resolve, reject) { + close(function (err, result) { if (err) { reject(err); } else { @@ -44,17 +44,17 @@ CM.close = function() { function Channel(connection, options) { BaseChannel.call(this, connection, options); - this.on('delivery', this.handleDelivery.bind(this)); - this.on('cancel', this.handleCancel.bind(this)); + this.on("delivery", this.handleDelivery.bind(this)); + this.on("cancel", this.handleCancel.bind(this)); } inherits(Channel, BaseChannel); module.exports.Channel = Channel; -CM.createChannel = function() { +CM.createChannel = function () { var options = { Promise: this.Promise }; var c = new Channel(this.connection, options); - return c.open().then(function(openOk) { + return c.open().then(function (openOk) { return c; }); }; @@ -64,38 +64,38 @@ var C = Channel.prototype; // An RPC that returns a 'proper' promise, which resolves to just the // response's fields; this is intended to be suitable for implementing // API procedures. -C.rpc = function(method, fields, expect) { +C.rpc = function (method, fields, expect) { var self = this; - return new this.Promise(function(resolve, reject) { - self._rpc(method, fields, expect, function(err, result) { + return new this.Promise(function (resolve, reject) { + self._rpc(method, fields, expect, function (err, result) { if (err) { reject(err); } else { resolve(result); } }); - }).then(function(f) { + }).then(function (f) { return f.fields; }); }; // Do the remarkably simple channel open handshake -C.open = function() { +C.open = function () { var allocate = this.allocate.bind(this); - return new this.Promise(function(resolve) { + return new this.Promise(function (resolve) { resolve(allocate()); - }).then(function(ch) { - return ch.rpc(defs.ChannelOpen, { outOfBand: '' }, defs.ChannelOpenOk); + }).then(function (ch) { + return ch.rpc(defs.ChannelOpen, { outOfBand: "" }, defs.ChannelOpenOk); }); // return Promise.try(this.allocate.bind(this)).then(function(ch) { // return ch.rpc(defs.ChannelOpen, { outOfBand: '' }, defs.ChannelOpenOk) // }) }; -C.close = function() { +C.close = function () { var self = this; - return new this.Promise(function(resolve, reject) { - self.closeBecause('Goodbye', defs.constants.REPLY_SUCCESS, function(err, result) { + return new this.Promise(function (resolve, reject) { + self.closeBecause("Goodbye", defs.constants.REPLY_SUCCESS, function (err, result) { if (err) { reject(err); } else { @@ -107,141 +107,141 @@ C.close = function() { // === Public API, declaring queues and stuff === -C.assertQueue = function(queue, options) { +C.assertQueue = function (queue, options) { return this.rpc(defs.QueueDeclare, Args.assertQueue(queue, options), defs.QueueDeclareOk); }; -C.checkQueue = function(queue) { +C.checkQueue = function (queue) { return this.rpc(defs.QueueDeclare, Args.checkQueue(queue), defs.QueueDeclareOk); }; -C.deleteQueue = function(queue, options) { +C.deleteQueue = function (queue, options) { return this.rpc(defs.QueueDelete, Args.deleteQueue(queue, options), defs.QueueDeleteOk); }; -C.purgeQueue = function(queue) { +C.purgeQueue = function (queue) { return this.rpc(defs.QueuePurge, Args.purgeQueue(queue), defs.QueuePurgeOk); }; -C.bindQueue = function(queue, source, pattern, argt) { +C.bindQueue = function (queue, source, pattern, argt) { return this.rpc(defs.QueueBind, Args.bindQueue(queue, source, pattern, argt), defs.QueueBindOk); }; -C.unbindQueue = function(queue, source, pattern, argt) { +C.unbindQueue = function (queue, source, pattern, argt) { return this.rpc(defs.QueueUnbind, Args.unbindQueue(queue, source, pattern, argt), defs.QueueUnbindOk); }; -C.assertExchange = function(exchange, type, options) { +C.assertExchange = function (exchange, type, options) { // The server reply is an empty set of fields, but it's convenient // to have the exchange name handed to the continuation. - return this.rpc(defs.ExchangeDeclare, Args.assertExchange(exchange, type, options), defs.ExchangeDeclareOk).then(function(_ok) { + return this.rpc(defs.ExchangeDeclare, Args.assertExchange(exchange, type, options), defs.ExchangeDeclareOk).then(function (_ok) { return { exchange: exchange }; }); }; -C.checkExchange = function(exchange) { +C.checkExchange = function (exchange) { return this.rpc(defs.ExchangeDeclare, Args.checkExchange(exchange), defs.ExchangeDeclareOk); }; -C.deleteExchange = function(name, options) { +C.deleteExchange = function (name, options) { return this.rpc(defs.ExchangeDelete, Args.deleteExchange(name, options), defs.ExchangeDeleteOk); }; -C.bindExchange = function(dest, source, pattern, argt) { +C.bindExchange = function (dest, source, pattern, argt) { return this.rpc(defs.ExchangeBind, Args.bindExchange(dest, source, pattern, argt), defs.ExchangeBindOk); }; -C.unbindExchange = function(dest, source, pattern, argt) { +C.unbindExchange = function (dest, source, pattern, argt) { return this.rpc(defs.ExchangeUnbind, Args.unbindExchange(dest, source, pattern, argt), defs.ExchangeUnbindOk); }; // Working with messages -C.publish = function(exchange, routingKey, content, options) { +C.publish = function (exchange, routingKey, content, options) { var fieldsAndProps = Args.publish(exchange, routingKey, options); return this.sendMessage(fieldsAndProps, fieldsAndProps, content); }; -C.sendToQueue = function(queue, content, options) { - return this.publish('', queue, content, options); +C.sendToQueue = function (queue, content, options) { + return this.publish("", queue, content, options); }; -C.consume = function(queue, callback, options) { +C.consume = function (queue, callback, options) { var self = this; // NB we want the callback to be run synchronously, so that we've // registered the consumerTag before any messages can arrive. var fields = Args.consume(queue, options); - return new this.Promise(function(resolve, reject) { - self._rpc(defs.BasicConsume, fields, defs.BasicConsumeOk, function(err, result) { + return new this.Promise(function (resolve, reject) { + self._rpc(defs.BasicConsume, fields, defs.BasicConsumeOk, function (err, result) { if (err) { reject(err); } else { resolve(result); } }); - }).then(function(ok) { + }).then(function (ok) { self.registerConsumer(ok.fields.consumerTag, callback); return ok.fields; }); }; -C.cancel = function(consumerTag) { +C.cancel = function (consumerTag) { var self = this; - return new this.Promise(function(resolve, reject) { - self._rpc(defs.BasicCancel, Args.cancel(consumerTag), defs.BasicCancelOk, function(err, result) { + return new this.Promise(function (resolve, reject) { + self._rpc(defs.BasicCancel, Args.cancel(consumerTag), defs.BasicCancelOk, function (err, result) { if (err) { reject(err); } else { resolve(result); } }); - }).then(function(ok) { + }).then(function (ok) { self.unregisterConsumer(consumerTag); return ok.fields; }); }; -C.get = function(queue, options) { +C.get = function (queue, options) { var self = this; var fields = Args.get(queue, options); - return new this.Promise(function(resolve, reject) { - self.sendOrEnqueue(defs.BasicGet, fields, function(err, result) { + return new this.Promise(function (resolve, reject) { + self.sendOrEnqueue(defs.BasicGet, fields, function (err, result) { if (err) { reject(err); } else { resolve(result); } }); - }).then(function(f) { + }).then(function (f) { if (f.id === defs.BasicGetEmpty) { return false; } else if (f.id === defs.BasicGetOk) { var fields = f.fields; - return new this.Promise(function(resolve) { - self.handleMessage = acceptMessage(function(m) { + return new this.Promise(function (resolve) { + self.handleMessage = acceptMessage(function (m) { m.fields = fields; resolve(m); }); }); } else { - throw new Error('Unexpected response to BasicGet: ' + inspect(f)); + throw new Error("Unexpected response to BasicGet: " + inspect(f)); } }); }; -C.ack = function(message, allUpTo) { +C.ack = function (message, allUpTo) { this.sendImmediately(defs.BasicAck, Args.ack(message.fields.deliveryTag, allUpTo)); }; -C.ackAll = function() { +C.ackAll = function () { this.sendImmediately(defs.BasicAck, Args.ack(0, true)); }; -C.nack = function(message, allUpTo, requeue) { +C.nack = function (message, allUpTo, requeue) { this.sendImmediately(defs.BasicNack, Args.nack(message.fields.deliveryTag, allUpTo, requeue)); }; -C.nackAll = function(requeue) { +C.nackAll = function (requeue) { this.sendImmediately(defs.BasicNack, Args.nack(0, true, requeue)); }; @@ -249,7 +249,7 @@ C.nackAll = function(requeue) { // AMQP specification), so you have to use the one-at-a-time // `Basic.Reject`. This is otherwise synonymous with // `#nack(message, false, requeue)`. -C.reject = function(message, requeue) { +C.reject = function (message, requeue) { this.sendImmediately(defs.BasicReject, Args.reject(message.fields.deliveryTag, requeue)); }; @@ -258,11 +258,11 @@ C.reject = function(message, requeue) { // channels or consumers. RabbitMQ v3.3.0 and after treat prefetch // (without `global` set) as per-consumer (for consumers following), // and prefetch with `global` set as per-channel. -C.prefetch = C.qos = function(count, global) { +C.prefetch = C.qos = function (count, global) { return this.rpc(defs.BasicQos, Args.prefetch(count, global), defs.BasicQosOk); }; -C.recover = function() { +C.recover = function () { return this.rpc(defs.BasicRecover, Args.recover(), defs.BasicRecoverOk); }; @@ -280,38 +280,38 @@ inherits(ConfirmChannel, Channel); module.exports.ConfirmChannel = ConfirmChannel; -CM.createConfirmChannel = function() { +CM.createConfirmChannel = function () { var c = new ConfirmChannel(this.connection); return c .open() - .then(function(openOk) { + .then(function (openOk) { return c.rpc(defs.ConfirmSelect, { nowait: false }, defs.ConfirmSelectOk); }) - .then(function() { + .then(function () { return c; }); }; var CC = ConfirmChannel.prototype; -CC.publish = function(exchange, routingKey, content, options, cb) { +CC.publish = function (exchange, routingKey, content, options, cb) { this.pushConfirmCallback(cb); return C.publish.call(this, exchange, routingKey, content, options); }; -CC.sendToQueue = function(queue, content, options, cb) { - return this.publish('', queue, content, options, cb); +CC.sendToQueue = function (queue, content, options, cb) { + return this.publish("", queue, content, options, cb); }; -CC.waitForConfirms = function() { +CC.waitForConfirms = function () { var awaiting = []; var unconfirmed = this.unconfirmed; - unconfirmed.forEach(function(val, index) { + unconfirmed.forEach(function (val, index) { if (val === null); else { // already confirmed - var confirmed = new this.Promise(function(resolve, reject) { - unconfirmed[index] = function(err) { + var confirmed = new this.Promise(function (resolve, reject) { + unconfirmed[index] = function (err) { if (val) val(err); if (err === null) resolve(); else reject(err); diff --git a/test/channel.js b/test/channel.js index fb4e718b..4d7fb7f8 100644 --- a/test/channel.js +++ b/test/channel.js @@ -1,39 +1,38 @@ // Test the channel machinery -'use strict'; +"use strict"; -var assert = require('assert'); -var Promise = require('bluebird'); -var Channel = require('../lib/channel').Channel; -var Connection = require('../lib/connection').Connection; -var util = require('./util'); +var assert = require("assert"); +var Channel = require("../lib/channel").Channel; +var Connection = require("../lib/connection").Connection; +var util = require("./util"); var succeed = util.succeed, fail = util.fail, latch = util.latch; var completes = util.completes; -var defs = require('../lib/defs'); -var conn_handshake = require('./connection').connection_handshake; -var OPEN_OPTS = require('./connection').OPEN_OPTS; -var Buffer = require('safe-buffer').Buffer; +var defs = require("../lib/defs"); +var conn_handshake = require("./connection").connection_handshake; +var OPEN_OPTS = require("./connection").OPEN_OPTS; +var Buffer = require("safe-buffer").Buffer; var LOG_ERRORS = process.env.LOG_ERRORS; function baseChannelTest(client, server) { - return function(done) { + return function (done) { var bothDone = latch(2, done); var pair = util.socketPair(); var c = new Connection(pair.client); - if (LOG_ERRORS) c.on('error', console.warn); + if (LOG_ERRORS) c.on("error", console.warn); - c.open(OPEN_OPTS, function(err, ok) { + c.open(OPEN_OPTS, function (err, ok) { if (err === null) client(c, bothDone); else fail(bothDone); }); pair.server.read(8); // discard the protocol header - var s = util.runServer(pair.server, function(send, wait) { - conn_handshake(send, wait).then(function() { + var s = util.runServer(pair.server, function (send, wait) { + conn_handshake(send, wait).then(function () { server(send, wait, bothDone); }, fail(bothDone)); }); @@ -42,50 +41,49 @@ function baseChannelTest(client, server) { function channelTest(client, server) { return baseChannelTest( - function(conn, done) { + function (conn, done) { var ch = new Channel(conn); - if (LOG_ERRORS) ch.on('error', console.warn); + if (LOG_ERRORS) ch.on("error", console.warn); client(ch, done, conn); }, - function(send, wait, done) { + function (send, wait, done) { channel_handshake(send, wait) - .then(function(ch) { + .then(function (ch) { return server(send, wait, done, ch); }) .then(null, fail(done)); // so you can return a promise to let // errors bubble out - } + }, ); } function channel_handshake(send, wait) { - return wait(defs.ChannelOpen)().then(function(open) { + return wait(defs.ChannelOpen)().then(function (open) { assert.notEqual(0, open.channel); - send(defs.ChannelOpenOk, { channelId: Buffer.from('') }, open.channel); + send(defs.ChannelOpenOk, { channelId: Buffer.from("") }, open.channel); return open.channel; }); } // fields for deliver and publish and get-ok var DELIVER_FIELDS = { - consumerTag: 'fake', + consumerTag: "fake", deliveryTag: 1, redelivered: false, - exchange: 'foo', - routingKey: 'bar', + exchange: "foo", + routingKey: "bar", replyCode: defs.constants.NO_ROUTE, - replyText: 'derp' + replyText: "derp", }; function open(ch) { debugger; - var self = this; - return new this.Promise(function(resolve) { + return new Promise(function (resolve) { resolve( - (function() { + (function () { ch.allocate(); - return new self.Promise(function(resolve, reject) { - ch._rpc(defs.ChannelOpen, { outOfBand: '' }, defs.ChannelOpenOk, function(err, result) { + return new Promise(function (resolve, reject) { + ch._rpc(defs.ChannelOpen, { outOfBand: "" }, defs.ChannelOpenOk, function (err, result) { if (err) { reject(err); } else { @@ -93,68 +91,68 @@ function open(ch) { } }); }); - })() + })(), ); }); } -suite('channel open and close', function() { +suite("channel open and close", function () { test( - 'open', + "open", channelTest( - function(ch, done) { + function (ch, done) { open(ch).then(succeed(done), fail(done)); }, - function(send, wait, done) { + function (send, wait, done) { done(); - } - ) + }, + ), ); test( - 'bad server', + "bad server", baseChannelTest( - function(c, done) { + function (c, done) { var ch = new Channel(c); open(ch).then(fail(done), succeed(done)); }, - function(send, wait, done) { + function (send, wait, done) { return wait(defs.ChannelOpen)() - .then(function(open) { + .then(function (open) { send(defs.ChannelCloseOk, {}, open.channel); }) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'open, close', + "open, close", channelTest( - function(ch, done) { + function (ch, done) { open(ch) - .then(function() { - return new Promise(function(resolve) { - ch.closeBecause('Bye', defs.constants.REPLY_SUCCESS, resolve); + .then(function () { + return new Promise(function (resolve) { + ch.closeBecause("Bye", defs.constants.REPLY_SUCCESS, resolve); }); }) .then(succeed(done), fail(done)); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { return wait(defs.ChannelClose)() - .then(function(close) { + .then(function (close) { send(defs.ChannelCloseOk, {}, ch); }) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'server close', + "server close", channelTest( - function(ch, done) { - ch.on('error', function(error) { + function (ch, done) { + ch.on("error", function (error) { assert.strictEqual(504, error.code); assert.strictEqual(0, error.classId); assert.strictEqual(0, error.methodId); @@ -162,86 +160,86 @@ suite('channel open and close', function() { }); open(ch); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { send( defs.ChannelClose, { - replyText: 'Forced close', + replyText: "Forced close", replyCode: defs.constants.CHANNEL_ERROR, classId: 0, - methodId: 0 + methodId: 0, }, - ch + ch, ); wait(defs.ChannelCloseOk)().then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'overlapping channel/server close', + "overlapping channel/server close", channelTest( - function(ch, done, conn) { + function (ch, done, conn) { var both = latch(2, done); - conn.on('error', succeed(both)); - ch.on('close', succeed(both)); - open(ch).then(function() { - ch.closeBecause('Bye', defs.constants.REPLY_SUCCESS); + conn.on("error", succeed(both)); + ch.on("close", succeed(both)); + open(ch).then(function () { + ch.closeBecause("Bye", defs.constants.REPLY_SUCCESS); }, fail(both)); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { wait(defs.ChannelClose)() - .then(function() { + .then(function () { send( defs.ConnectionClose, { - replyText: 'Got there first', + replyText: "Got there first", replyCode: defs.constants.INTERNAL_ERROR, classId: 0, - methodId: 0 + methodId: 0, }, - 0 + 0, ); }) .then(wait(defs.ConnectionCloseOk)) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'double close', + "double close", channelTest( - function(ch, done) { + function (ch, done) { open(ch) - .then(function() { - ch.closeBecause('First close', defs.constants.REPLY_SUCCESS); + .then(function () { + ch.closeBecause("First close", defs.constants.REPLY_SUCCESS); // NB no synchronisation, we do this straight away - assert.throws(function() { - ch.closeBecause('Second close', defs.constants.REPLY_SUCCESS); + assert.throws(function () { + ch.closeBecause("Second close", defs.constants.REPLY_SUCCESS); }); }) .then(succeed(done), fail(done)); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { wait(defs.ChannelClose)() - .then(function() { + .then(function () { send(defs.ChannelCloseOk, {}, ch); }) .then(succeed(done), fail(done)); - } - ) + }, + ), ); }); //suite -suite('channel machinery', function() { +suite("channel machinery", function () { test( - 'RPC', + "RPC", channelTest( - function(ch, done) { + function (ch, done) { var rpcLatch = latch(3, done); open(ch) - .then(function() { + .then(function () { function wheeboom(err, f) { if (err !== null) rpcLatch(err); else rpcLatch(); @@ -250,7 +248,7 @@ suite('channel machinery', function() { var fields = { prefetchCount: 10, prefetchSize: 0, - global: false + global: false, }; ch._rpc(defs.BasicQos, fields, defs.BasicQosOk, wheeboom); @@ -259,65 +257,59 @@ suite('channel machinery', function() { }) .then(null, fail(rpcLatch)); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { function sendOk(f) { send(defs.BasicQosOk, {}, ch); } - return wait(defs.BasicQos)() - .then(sendOk) - .then(wait(defs.BasicQos)) - .then(sendOk) - .then(wait(defs.BasicQos)) - .then(sendOk) - .then(succeed(done), fail(done)); - } - ) + return wait(defs.BasicQos)().then(sendOk).then(wait(defs.BasicQos)).then(sendOk).then(wait(defs.BasicQos)).then(sendOk).then(succeed(done), fail(done)); + }, + ), ); test( - 'Bad RPC', + "Bad RPC", channelTest( - function(ch, done) { + function (ch, done) { // We want to see the RPC rejected and the channel closed (with an // error) var errLatch = latch(2, done); - ch.on('error', function(error) { + ch.on("error", function (error) { assert.strictEqual(505, error.code); assert.strictEqual(60, error.classId); assert.strictEqual(72, error.methodId); succeed(errLatch)(); }); - open(ch).then(function() { - ch._rpc(defs.BasicRecover, { requeue: true }, defs.BasicRecoverOk, function(err) { + open(ch).then(function () { + ch._rpc(defs.BasicRecover, { requeue: true }, defs.BasicRecoverOk, function (err) { if (err !== null) errLatch(); - else errLatch(new Error('Expected RPC failure')); + else errLatch(new Error("Expected RPC failure")); }); }, fail(errLatch)); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { return wait()() - .then(function() { - send(defs.BasicGetEmpty, { clusterId: '' }, ch); + .then(function () { + send(defs.BasicGetEmpty, { clusterId: "" }, ch); }) // oh wait! that was wrong! expect a channel close .then(wait(defs.ChannelClose)) - .then(function() { + .then(function () { send(defs.ChannelCloseOk, {}, ch); }) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'RPC on closed channel', + "RPC on closed channel", channelTest( - function(ch, done) { + function (ch, done) { open(ch); - var close = new Promise(function(resolve) { - ch.on('error', function(error) { + var close = new Promise(function (resolve) { + ch.on("error", function (error) { assert.strictEqual(504, error.code); assert.strictEqual(0, error.classId); assert.strictEqual(0, error.methodId); @@ -326,422 +318,420 @@ suite('channel machinery', function() { }); function failureCb(resolve, reject) { - return function(err) { + return function (err) { if (err !== null) resolve(); else reject(); }; } - var fail1 = new Promise(function(resolve, reject) { + var fail1 = new Promise(function (resolve, reject) { return ch._rpc(defs.BasicRecover, { requeue: true }, defs.BasicRecoverOk, failureCb(resolve, reject)); }); - var fail2 = new Promise(function(resolve, reject) { + var fail2 = new Promise(function (resolve, reject) { return ch._rpc(defs.BasicRecover, { requeue: true }, defs.BasicRecoverOk, failureCb(resolve, reject)); }); - Promise.join(close, fail1, fail2) - .then(succeed(done)) - .catch(fail(done)); + Promise.join(close, fail1, fail2).then(succeed(done)).catch(fail(done)); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { wait(defs.BasicRecover)() - .then(function() { + .then(function () { send( defs.ChannelClose, { - replyText: 'Nuh-uh!', + replyText: "Nuh-uh!", replyCode: defs.constants.CHANNEL_ERROR, methodId: 0, - classId: 0 + classId: 0, }, - ch + ch, ); return wait(defs.ChannelCloseOk); }) .then(succeed(done)) .catch(fail(done)); - } - ) + }, + ), ); test( - 'publish all < single chunk threshold', + "publish all < single chunk threshold", channelTest( - function(ch, done) { + function (ch, done) { open(ch) - .then(function() { + .then(function () { ch.sendMessage( { - exchange: 'foo', - routingKey: 'bar', + exchange: "foo", + routingKey: "bar", mandatory: false, immediate: false, - ticket: 0 + ticket: 0, }, {}, - Buffer.from('foobar') + Buffer.from("foobar"), ); }) .then(succeed(done), fail(done)); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { wait(defs.BasicPublish)() .then(wait(defs.BasicProperties)) .then(wait(undefined)) // content frame - .then(function(f) { - assert.equal('foobar', f.content.toString()); + .then(function (f) { + assert.equal("foobar", f.content.toString()); }) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'publish content > single chunk threshold', + "publish content > single chunk threshold", channelTest( - function(ch, done) { + function (ch, done) { open(ch); - completes(function() { + completes(function () { ch.sendMessage( { - exchange: 'foo', - routingKey: 'bar', + exchange: "foo", + routingKey: "bar", mandatory: false, immediate: false, - ticket: 0 + ticket: 0, }, {}, - Buffer.alloc(3000) + Buffer.alloc(3000), ); }, done); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { wait(defs.BasicPublish)() .then(wait(defs.BasicProperties)) .then(wait(undefined)) // content frame - .then(function(f) { + .then(function (f) { assert.equal(3000, f.content.length); }) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'publish method & headers > threshold', + "publish method & headers > threshold", channelTest( - function(ch, done) { + function (ch, done) { open(ch); - completes(function() { + completes(function () { ch.sendMessage( { - exchange: 'foo', - routingKey: 'bar', + exchange: "foo", + routingKey: "bar", mandatory: false, immediate: false, - ticket: 0 + ticket: 0, }, { - headers: { foo: Buffer.alloc(3000) } + headers: { foo: Buffer.alloc(3000) }, }, - Buffer.from('foobar') + Buffer.from("foobar"), ); }, done); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { wait(defs.BasicPublish)() .then(wait(defs.BasicProperties)) .then(wait(undefined)) // content frame - .then(function(f) { - assert.equal('foobar', f.content.toString()); + .then(function (f) { + assert.equal("foobar", f.content.toString()); }) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'publish zero-length message', + "publish zero-length message", channelTest( - function(ch, done) { + function (ch, done) { open(ch); - completes(function() { + completes(function () { ch.sendMessage( { - exchange: 'foo', - routingKey: 'bar', + exchange: "foo", + routingKey: "bar", mandatory: false, immediate: false, - ticket: 0 + ticket: 0, }, {}, - Buffer.alloc(0) + Buffer.alloc(0), ); ch.sendMessage( { - exchange: 'foo', - routingKey: 'bar', + exchange: "foo", + routingKey: "bar", mandatory: false, immediate: false, - ticket: 0 + ticket: 0, }, {}, - Buffer.alloc(0) + Buffer.alloc(0), ); }, done); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { wait(defs.BasicPublish)() .then(wait(defs.BasicProperties)) // no content frame for a zero-length message .then(wait(defs.BasicPublish)) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'delivery', + "delivery", channelTest( - function(ch, done) { + function (ch, done) { open(ch); - ch.on('delivery', function(m) { - completes(function() { - assert.equal('barfoo', m.content.toString()); + ch.on("delivery", function (m) { + completes(function () { + assert.equal("barfoo", m.content.toString()); }, done); }); }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('barfoo')); + function (send, wait, done, ch) { + completes(function () { + send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from("barfoo")); }, done); - } - ) + }, + ), ); test( - 'zero byte msg', + "zero byte msg", channelTest( - function(ch, done) { + function (ch, done) { open(ch); - ch.on('delivery', function(m) { - completes(function() { + ch.on("delivery", function (m) { + completes(function () { assert.deepEqual(Buffer.alloc(0), m.content); }, done); }); }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('')); + function (send, wait, done, ch) { + completes(function () { + send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from("")); }, done); - } - ) + }, + ), ); test( - 'bad delivery', + "bad delivery", channelTest( - function(ch, done) { + function (ch, done) { var errorAndClose = latch(2, done); - ch.on('error', function(error) { + ch.on("error", function (error) { assert.strictEqual(505, error.code); assert.strictEqual(60, error.classId); assert.strictEqual(60, error.methodId); succeed(errorAndClose)(); }); - ch.on('close', succeed(errorAndClose)); + ch.on("close", succeed(errorAndClose)); open(ch); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { send(defs.BasicDeliver, DELIVER_FIELDS, ch); // now send another deliver without having sent the content send(defs.BasicDeliver, DELIVER_FIELDS, ch); return wait(defs.ChannelClose)() - .then(function() { + .then(function () { send(defs.ChannelCloseOk, {}, ch); }) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'bad content send', + "bad content send", channelTest( - function(ch, done) { - completes(function() { + function (ch, done) { + completes(function () { open(ch); - assert.throws(function() { - ch.sendMessage({ routingKey: 'foo', exchange: 'amq.direct' }, {}, null); + assert.throws(function () { + ch.sendMessage({ routingKey: "foo", exchange: "amq.direct" }, {}, null); }); }, done); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { done(); - } - ) + }, + ), ); test( - 'bad properties send', + "bad properties send", channelTest( - function(ch, done) { - completes(function() { + function (ch, done) { + completes(function () { open(ch); - assert.throws(function() { - ch.sendMessage({ routingKey: 'foo', exchange: 'amq.direct' }, { contentEncoding: 7 }, Buffer.from('foobar')); + assert.throws(function () { + ch.sendMessage({ routingKey: "foo", exchange: "amq.direct" }, { contentEncoding: 7 }, Buffer.from("foobar")); }); }, done); }, - function(send, wait, done, ch) { + function (send, wait, done, ch) { done(); - } - ) + }, + ), ); test( - 'bad consumer', + "bad consumer", channelTest( - function(ch, done) { + function (ch, done) { var errorAndClose = latch(2, done); - ch.on('delivery', function() { - throw new Error('I am a bad consumer'); + ch.on("delivery", function () { + throw new Error("I am a bad consumer"); }); - ch.on('error', function(error) { + ch.on("error", function (error) { assert.strictEqual(541, error.code); assert.strictEqual(undefined, error.classId); assert.strictEqual(undefined, error.methodId); succeed(errorAndClose)(); }); - ch.on('close', succeed(errorAndClose)); + ch.on("close", succeed(errorAndClose)); open(ch); }, - function(send, wait, done, ch) { - send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('barfoo')); + function (send, wait, done, ch) { + send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from("barfoo")); return wait(defs.ChannelClose)() - .then(function() { + .then(function () { send(defs.ChannelCloseOk, {}, ch); }) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'bad send in consumer', + "bad send in consumer", channelTest( - function(ch, done) { + function (ch, done) { var errorAndClose = latch(2, done); - ch.on('close', succeed(errorAndClose)); - ch.on('error', function(error) { + ch.on("close", succeed(errorAndClose)); + ch.on("error", function (error) { assert.strictEqual(541, error.code); assert.strictEqual(undefined, error.classId); assert.strictEqual(undefined, error.methodId); succeed(errorAndClose)(); }); - ch.on('delivery', function() { - ch.sendMessage({ routingKey: 'foo', exchange: 'amq.direct' }, {}, null); // can't send null + ch.on("delivery", function () { + ch.sendMessage({ routingKey: "foo", exchange: "amq.direct" }, {}, null); // can't send null }); open(ch); }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('barfoo')); + function (send, wait, done, ch) { + completes(function () { + send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from("barfoo")); }, done); return wait(defs.ChannelClose)() - .then(function() { + .then(function () { send(defs.ChannelCloseOk, {}, ch); }) .then(succeed(done), fail(done)); - } - ) + }, + ), ); test( - 'return', + "return", channelTest( - function(ch, done) { - ch.on('return', function(m) { - completes(function() { - assert.equal('barfoo', m.content.toString()); + function (ch, done) { + ch.on("return", function (m) { + completes(function () { + assert.equal("barfoo", m.content.toString()); }, done); }); open(ch); }, - function(send, wait, done, ch) { - completes(function() { - send(defs.BasicReturn, DELIVER_FIELDS, ch, Buffer.from('barfoo')); + function (send, wait, done, ch) { + completes(function () { + send(defs.BasicReturn, DELIVER_FIELDS, ch, Buffer.from("barfoo")); }, done); - } - ) + }, + ), ); test( - 'cancel', + "cancel", channelTest( - function(ch, done) { - ch.on('cancel', function(f) { - completes(function() { - assert.equal('product of society', f.consumerTag); + function (ch, done) { + ch.on("cancel", function (f) { + completes(function () { + assert.equal("product of society", f.consumerTag); }, done); }); open(ch); }, - function(send, wait, done, ch) { - completes(function() { + function (send, wait, done, ch) { + completes(function () { send( defs.BasicCancel, { - consumerTag: 'product of society', - nowait: false + consumerTag: "product of society", + nowait: false, }, - ch + ch, ); }, done); - } - ) + }, + ), ); function confirmTest(variety, Method) { return test( - 'confirm ' + variety, + "confirm " + variety, channelTest( - function(ch, done) { - ch.on(variety, function(f) { - completes(function() { + function (ch, done) { + ch.on(variety, function (f) { + completes(function () { assert.equal(1, f.deliveryTag); }, done); }); open(ch); }, - function(send, wait, done, ch) { - completes(function() { + function (send, wait, done, ch) { + completes(function () { send( Method, { deliveryTag: 1, - multiple: false + multiple: false, }, - ch + ch, ); }, done); - } - ) + }, + ), ); } - confirmTest('ack', defs.BasicAck); - confirmTest('nack', defs.BasicNack); + confirmTest("ack", defs.BasicAck); + confirmTest("nack", defs.BasicNack); test( - 'out-of-order acks', + "out-of-order acks", channelTest( - function(ch, done) { - var allConfirms = latch(3, function() { - completes(function() { + function (ch, done) { + var allConfirms = latch(3, function () { + completes(function () { assert.equal(0, ch.unconfirmed.length); assert.equal(4, ch.lwm); }, done); @@ -751,39 +741,39 @@ suite('channel machinery', function() { ch.pushConfirmCallback(allConfirms); open(ch); }, - function(send, wait, done, ch) { - completes(function() { + function (send, wait, done, ch) { + completes(function () { send(defs.BasicAck, { deliveryTag: 2, multiple: false }, ch); send(defs.BasicAck, { deliveryTag: 3, multiple: false }, ch); send(defs.BasicAck, { deliveryTag: 1, multiple: false }, ch); }, done); - } - ) + }, + ), ); test( - 'not all out-of-order acks', + "not all out-of-order acks", channelTest( - function(ch, done) { - var allConfirms = latch(2, function() { - completes(function() { + function (ch, done) { + var allConfirms = latch(2, function () { + completes(function () { assert.equal(1, ch.unconfirmed.length); assert.equal(3, ch.lwm); }, done); }); ch.pushConfirmCallback(allConfirms); // tag = 1 ch.pushConfirmCallback(allConfirms); // tag = 2 - ch.pushConfirmCallback(function() { - done(new Error('Confirm callback should not be called')); + ch.pushConfirmCallback(function () { + done(new Error("Confirm callback should not be called")); }); open(ch); }, - function(send, wait, done, ch) { - completes(function() { + function (send, wait, done, ch) { + completes(function () { send(defs.BasicAck, { deliveryTag: 2, multiple: false }, ch); send(defs.BasicAck, { deliveryTag: 1, multiple: false }, ch); }, done); - } - ) + }, + ), ); }); diff --git a/test/channel_api.js b/test/channel_api.js index 1e1abc4f..2ce16f61 100644 --- a/test/channel_api.js +++ b/test/channel_api.js @@ -1,24 +1,23 @@ -'use strict'; +"use strict"; -var assert = require('assert'); -var api = require('../channel_api'); -var util = require('./util'); +var assert = require("assert"); +var api = require("../channel_api"); +var util = require("./util"); var succeed = util.succeed, fail = util.fail; var schedule = util.schedule; var randomString = util.randomString; -var Promise = require('bluebird'); -var Buffer = require('safe-buffer').Buffer; +var Buffer = require("safe-buffer").Buffer; -var URL = process.env.URL || 'amqp://localhost:5673'; +var URL = process.env.URL || "amqp://localhost:5673"; function connect() { - return api.connect(URL, { Promise: Promise }); + return api.connect(URL, {}); } // Expect this promise to fail, and flip the results accordingly. function expectFail(promise) { - return new Promise(function(resolve, reject) { + return new Promise(function (resolve, reject) { return promise.then(reject).catch(resolve); }); } @@ -27,11 +26,11 @@ function expectFail(promise) { // close error, to detect failure. function ignore() {} function ignoreErrors(c) { - c.on('error', ignore); + c.on("error", ignore); return c; } function logErrors(c) { - c.on('error', console.warn); + c.on("error", console.warn); return c; } @@ -39,100 +38,100 @@ function logErrors(c) { // channel, and returns a promise that is resolved on test success or // rejected on test failure. function channel_test(chmethod, name, chfun) { - test(name, function(done) { + test(name, function (done) { connect(URL) .then(logErrors) - .then(function(c) { + .then(function (c) { c[chmethod]() .then(ignoreErrors) .then(chfun) .then(succeed(done), fail(done)) // close the connection regardless of what happens with the test - .finally(function() { + .finally(function () { c.close(); }); }); }); } -var chtest = channel_test.bind(null, 'createChannel'); +var chtest = channel_test.bind(null, "createChannel"); -suite('connect', function() { - test('at all', function(done) { +suite("connect", function () { + test("at all", function (done) { connect(URL) - .then(function(c) { + .then(function (c) { return c.close(); }) .then(succeed(done), fail(done)); }); - chtest('create channel', ignore); // i.e., just don't bork + chtest("create channel", ignore); // i.e., just don't bork }); var QUEUE_OPTS = { durable: false }; var EX_OPTS = { durable: false }; -suite('assert, check, delete', function() { - chtest('assert and check queue', function(ch) { - return ch.assertQueue('test.check-queue', QUEUE_OPTS).then(function(qok) { - return ch.checkQueue('test.check-queue'); +suite("assert, check, delete", function () { + chtest("assert and check queue", function (ch) { + return ch.assertQueue("test.check-queue", QUEUE_OPTS).then(function (qok) { + return ch.checkQueue("test.check-queue"); }); }); - chtest('assert and check exchange', function(ch) { - return ch.assertExchange('test.check-exchange', 'direct', EX_OPTS).then(function(eok) { - assert.equal('test.check-exchange', eok.exchange); - return ch.checkExchange('test.check-exchange'); + chtest("assert and check exchange", function (ch) { + return ch.assertExchange("test.check-exchange", "direct", EX_OPTS).then(function (eok) { + assert.equal("test.check-exchange", eok.exchange); + return ch.checkExchange("test.check-exchange"); }); }); - chtest('fail on reasserting queue with different options', function(ch) { - var q = 'test.reassert-queue'; - return ch.assertQueue(q, { durable: false, autoDelete: true }).then(function() { + chtest("fail on reasserting queue with different options", function (ch) { + var q = "test.reassert-queue"; + return ch.assertQueue(q, { durable: false, autoDelete: true }).then(function () { return expectFail(ch.assertQueue(q, { durable: false, autoDelete: false })); }); }); - chtest("fail on checking a queue that's not there", function(ch) { - return expectFail(ch.checkQueue('test.random-' + randomString())); + chtest("fail on checking a queue that's not there", function (ch) { + return expectFail(ch.checkQueue("test.random-" + randomString())); }); - chtest("fail on checking an exchange that's not there", function(ch) { - return expectFail(ch.checkExchange('test.random-' + randomString())); + chtest("fail on checking an exchange that's not there", function (ch) { + return expectFail(ch.checkExchange("test.random-" + randomString())); }); - chtest('fail on reasserting exchange with different type', function(ch) { - var ex = 'test.reassert-ex'; - return ch.assertExchange(ex, 'fanout', EX_OPTS).then(function() { - return expectFail(ch.assertExchange(ex, 'direct', EX_OPTS)); + chtest("fail on reasserting exchange with different type", function (ch) { + var ex = "test.reassert-ex"; + return ch.assertExchange(ex, "fanout", EX_OPTS).then(function () { + return expectFail(ch.assertExchange(ex, "direct", EX_OPTS)); }); }); - chtest('channel break on publishing to non-exchange', function(ch) { - return new Promise(function(resolve) { - ch.on('error', resolve); - ch.publish(randomString(), '', Buffer.from('foobar')); + chtest("channel break on publishing to non-exchange", function (ch) { + return new Promise(function (resolve) { + ch.on("error", resolve); + ch.publish(randomString(), "", Buffer.from("foobar")); }); }); - chtest('delete queue', function(ch) { - var q = 'test.delete-queue'; + chtest("delete queue", function (ch) { + var q = "test.delete-queue"; return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.checkQueue(q)) - .then(function() { + .then(function () { return ch.deleteQueue(q); }) - .then(function() { + .then(function () { return expectFail(ch.checkQueue(q)); }); }); - chtest('delete exchange', function(ch) { - var ex = 'test.delete-exchange'; - return Promise.join(ch.assertExchange(ex, 'fanout', EX_OPTS), ch.checkExchange(ex)) - .then(function() { + chtest("delete exchange", function (ch) { + var ex = "test.delete-exchange"; + return Promise.join(ch.assertExchange(ex, "fanout", EX_OPTS), ch.checkExchange(ex)) + .then(function () { return ch.deleteExchange(ex); }) - .then(function() { + .then(function () { return expectFail(ch.checkExchange(ex)); }); }); @@ -141,11 +140,11 @@ suite('assert, check, delete', function() { // Wait for the queue to meet the condition; useful for waiting for // messages to arrive, for example. function waitForQueue(q, condition) { - return connect(URL).then(function(c) { - return c.createChannel().then(function(ch) { - return ch.checkQueue(q).then(function(qok) { + return connect(URL).then(function (c) { + return c.createChannel().then(function (ch) { + return ch.checkQueue(q).then(function (qok) { function check() { - return ch.checkQueue(q).then(function(qok) { + return ch.checkQueue(q).then(function (qok) { if (condition(qok)) { c.close(); return qok; @@ -162,119 +161,119 @@ function waitForQueue(q, condition) { // messages. If num is not supplied its assumed to be 1. function waitForMessages(q, num) { var min = num === undefined ? 1 : num; - return waitForQueue(q, function(qok) { + return waitForQueue(q, function (qok) { return qok.messageCount >= min; }); } -suite('sendMessage', function() { +suite("sendMessage", function () { // publish different size messages - chtest('send to queue and get from queue', function(ch) { - var q = 'test.send-to-q'; + chtest("send to queue and get from queue", function (ch) { + var q = "test.send-to-q"; var msg = randomString(); return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) - .then(function() { + .then(function () { ch.sendToQueue(q, Buffer.from(msg)); return waitForMessages(q); }) - .then(function() { + .then(function () { return ch.get(q, { noAck: true }); }) - .then(function(m) { + .then(function (m) { assert(m); assert.equal(msg, m.content.toString()); }); }); - chtest('send (and get) zero content to queue', function(ch) { - var q = 'test.send-to-q'; + chtest("send (and get) zero content to queue", function (ch) { + var q = "test.send-to-q"; var msg = Buffer.alloc(0); return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) - .then(function() { + .then(function () { ch.sendToQueue(q, msg); return waitForMessages(q); }) - .then(function() { + .then(function () { return ch.get(q, { noAck: true }); }) - .then(function(m) { + .then(function (m) { assert(m); assert.deepEqual(msg, m.content); }); }); }); -suite('binding, consuming', function() { +suite("binding, consuming", function () { // bind, publish, get - chtest('route message', function(ch) { - var ex = 'test.route-message'; - var q = 'test.route-message-q'; + chtest("route message", function (ch) { + var ex = "test.route-message"; + var q = "test.route-message-q"; var msg = randomString(); - return Promise.join(ch.assertExchange(ex, 'fanout', EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindQueue(q, ex, '', {})) - .then(function() { - ch.publish(ex, '', Buffer.from(msg)); + return Promise.join(ch.assertExchange(ex, "fanout", EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindQueue(q, ex, "", {})) + .then(function () { + ch.publish(ex, "", Buffer.from(msg)); return waitForMessages(q); }) - .then(function() { + .then(function () { return ch.get(q, { noAck: true }); }) - .then(function(m) { + .then(function (m) { assert(m); assert.equal(msg, m.content.toString()); }); }); // send to queue, purge, get-empty - chtest('purge queue', function(ch) { - var q = 'test.purge-queue'; + chtest("purge queue", function (ch) { + var q = "test.purge-queue"; return ch .assertQueue(q, { durable: false }) - .then(function() { - ch.sendToQueue(q, Buffer.from('foobar')); + .then(function () { + ch.sendToQueue(q, Buffer.from("foobar")); return waitForMessages(q); }) - .then(function() { + .then(function () { ch.purgeQueue(q); return ch.get(q, { noAck: true }); }) - .then(function(m) { + .then(function (m) { assert(!m); // get-empty }); }); // bind again, unbind, publish, get-empty - chtest('unbind queue', function(ch) { - var ex = 'test.unbind-queue-ex'; - var q = 'test.unbind-queue'; + chtest("unbind queue", function (ch) { + var ex = "test.unbind-queue-ex"; + var q = "test.unbind-queue"; var viabinding = randomString(); var direct = randomString(); - return Promise.join(ch.assertExchange(ex, 'fanout', EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindQueue(q, ex, '', {})) - .then(function() { - ch.publish(ex, '', Buffer.from('foobar')); + return Promise.join(ch.assertExchange(ex, "fanout", EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindQueue(q, ex, "", {})) + .then(function () { + ch.publish(ex, "", Buffer.from("foobar")); return waitForMessages(q); }) - .then(function() { + .then(function () { // message got through! - return ch.get(q, { noAck: true }).then(function(m) { + return ch.get(q, { noAck: true }).then(function (m) { assert(m); }); }) - .then(function() { - return ch.unbindQueue(q, ex, '', {}); + .then(function () { + return ch.unbindQueue(q, ex, "", {}); }) - .then(function() { + .then(function () { // via the no-longer-existing binding - ch.publish(ex, '', Buffer.from(viabinding)); + ch.publish(ex, "", Buffer.from(viabinding)); // direct to the queue ch.sendToQueue(q, Buffer.from(direct)); return waitForMessages(q); }) - .then(function() { + .then(function () { return ch.get(q); }) - .then(function(m) { + .then(function (m) { // the direct to queue message got through, the via-binding // message (sent first) did not assert.equal(direct, m.content.toString()); @@ -283,19 +282,19 @@ suite('binding, consuming', function() { // To some extent this is now just testing semantics of the server, // but we can at least try out a few settings, and consume. - chtest('consume via exchange-exchange binding', function(ch) { - var ex1 = 'test.ex-ex-binding1', - ex2 = 'test.ex-ex-binding2'; - var q = 'test.ex-ex-binding-q'; - var rk = 'test.routing.key', + chtest("consume via exchange-exchange binding", function (ch) { + var ex1 = "test.ex-ex-binding1", + ex2 = "test.ex-ex-binding2"; + var q = "test.ex-ex-binding-q"; + var rk = "test.routing.key", msg = randomString(); - return Promise.join(ch.assertExchange(ex1, 'direct', EX_OPTS), ch.assertExchange(ex2, 'fanout', { durable: false, internal: true }), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindExchange(ex2, ex1, rk, {}), ch.bindQueue(q, ex2, '', {})).then(function() { - return new Promise(function(resolve, reject) { + return Promise.join(ch.assertExchange(ex1, "direct", EX_OPTS), ch.assertExchange(ex2, "fanout", { durable: false, internal: true }), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindExchange(ex2, ex1, rk, {}), ch.bindQueue(q, ex2, "", {})).then(function () { + return new Promise(function (resolve, reject) { function delivery(m) { if (m.content.toString() === msg) resolve(); - else reject(new Error('Wrong message')); + else reject(new Error("Wrong message")); } - ch.consume(q, delivery, { noAck: true }).then(function() { + ch.consume(q, delivery, { noAck: true }).then(function () { ch.publish(ex1, rk, Buffer.from(msg)); }); }); @@ -303,38 +302,38 @@ suite('binding, consuming', function() { }); // bind again, unbind, publish, get-empty - chtest('unbind exchange', function(ch) { - var source = 'test.unbind-ex-source'; - var dest = 'test.unbind-ex-dest'; - var q = 'test.unbind-ex-queue'; + chtest("unbind exchange", function (ch) { + var source = "test.unbind-ex-source"; + var dest = "test.unbind-ex-dest"; + var q = "test.unbind-ex-queue"; var viabinding = randomString(); var direct = randomString(); - return Promise.join(ch.assertExchange(source, 'fanout', EX_OPTS), ch.assertExchange(dest, 'fanout', EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindExchange(dest, source, '', {}), ch.bindQueue(q, dest, '', {})) - .then(function() { - ch.publish(source, '', Buffer.from('foobar')); + return Promise.join(ch.assertExchange(source, "fanout", EX_OPTS), ch.assertExchange(dest, "fanout", EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindExchange(dest, source, "", {}), ch.bindQueue(q, dest, "", {})) + .then(function () { + ch.publish(source, "", Buffer.from("foobar")); return waitForMessages(q); }) - .then(function() { + .then(function () { // message got through! - return ch.get(q, { noAck: true }).then(function(m) { + return ch.get(q, { noAck: true }).then(function (m) { assert(m); }); }) - .then(function() { - return ch.unbindExchange(dest, source, '', {}); + .then(function () { + return ch.unbindExchange(dest, source, "", {}); }) - .then(function() { + .then(function () { // via the no-longer-existing binding - ch.publish(source, '', Buffer.from(viabinding)); + ch.publish(source, "", Buffer.from(viabinding)); // direct to the queue ch.sendToQueue(q, Buffer.from(direct)); return waitForMessages(q); }) - .then(function() { + .then(function () { return ch.get(q); }) - .then(function(m) { + .then(function (m) { // the direct to queue message got through, the via-binding // message (sent first) did not assert.equal(direct, m.content.toString()); @@ -342,37 +341,37 @@ suite('binding, consuming', function() { }); // This is a bit convoluted. Sorry. - chtest('cancel consumer', function(ch) { - var q = 'test.consumer-cancel'; + chtest("cancel consumer", function (ch) { + var q = "test.consumer-cancel"; var ctag; - var recv1 = new Promise(function(resolve, reject) { + var recv1 = new Promise(function (resolve, reject) { Promise.join( ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), // My callback is 'resolve the promise in `arrived`' - ch.consume(q, resolve, { noAck: true }).then(function(ok) { + ch.consume(q, resolve, { noAck: true }).then(function (ok) { ctag = ok.consumerTag; - ch.sendToQueue(q, Buffer.from('foo')); - }) + ch.sendToQueue(q, Buffer.from("foo")); + }), ); }); // A message should arrive because of the consume - return recv1.then(function() { + return recv1.then(function () { var recv2 = Promise.join( - ch.cancel(ctag).then(function() { - return ch.sendToQueue(q, Buffer.from('bar')); + ch.cancel(ctag).then(function () { + return ch.sendToQueue(q, Buffer.from("bar")); }), // but check a message did arrive in the queue - waitForMessages(q) + waitForMessages(q), ) - .then(function() { + .then(function () { return ch.get(q, { noAck: true }); }) - .then(function(m) { + .then(function (m) { // I'm going to reject it, because I flip succeed/fail // just below - if (m.content.toString() === 'bar') { + if (m.content.toString() === "bar") { throw new Error(); } }); @@ -381,45 +380,45 @@ suite('binding, consuming', function() { }); }); - chtest('cancelled consumer', function(ch) { - var q = 'test.cancelled-consumer'; - return new Promise(function(resolve, reject) { + chtest("cancelled consumer", function (ch) { + var q = "test.cancelled-consumer"; + return new Promise(function (resolve, reject) { return Promise.join( ch.assertQueue(q), ch.purgeQueue(q), - ch.consume(q, function(msg) { + ch.consume(q, function (msg) { if (msg === null) resolve(); - else reject(new Error('Message not expected')); - }) - ).then(function() { + else reject(new Error("Message not expected")); + }), + ).then(function () { return ch.deleteQueue(q); }); }); }); // ack, by default, removes a single message from the queue - chtest('ack', function(ch) { - var q = 'test.ack'; + chtest("ack", function (ch) { + var q = "test.ack"; var msg1 = randomString(), msg2 = randomString(); return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) - .then(function() { + .then(function () { ch.sendToQueue(q, Buffer.from(msg1)); ch.sendToQueue(q, Buffer.from(msg2)); return waitForMessages(q, 2); }) - .then(function() { + .then(function () { return ch.get(q, { noAck: false }); }) - .then(function(m) { + .then(function (m) { assert.equal(msg1, m.content.toString()); ch.ack(m); // %%% is there a race here? may depend on // rabbitmq-sepcific semantics return ch.get(q); }) - .then(function(m) { + .then(function (m) { assert(m); assert.equal(msg2, m.content.toString()); }); @@ -427,27 +426,27 @@ suite('binding, consuming', function() { // Nack, by default, puts a message back on the queue (where in the // queue is up to the server) - chtest('nack', function(ch) { - var q = 'test.nack'; + chtest("nack", function (ch) { + var q = "test.nack"; var msg1 = randomString(); return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) - .then(function() { + .then(function () { ch.sendToQueue(q, Buffer.from(msg1)); return waitForMessages(q); }) - .then(function() { + .then(function () { return ch.get(q, { noAck: false }); }) - .then(function(m) { + .then(function (m) { assert.equal(msg1, m.content.toString()); ch.nack(m); return waitForMessages(q); }) - .then(function() { + .then(function () { return ch.get(q); }) - .then(function(m) { + .then(function (m) { assert(m); assert.equal(msg1, m.content.toString()); }); @@ -455,42 +454,42 @@ suite('binding, consuming', function() { // reject is a near-synonym for nack, the latter of which is not // available in earlier RabbitMQ (or in AMQP proper). - chtest('reject', function(ch) { - var q = 'test.reject'; + chtest("reject", function (ch) { + var q = "test.reject"; var msg1 = randomString(); return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) - .then(function() { + .then(function () { ch.sendToQueue(q, Buffer.from(msg1)); return waitForMessages(q); }) - .then(function() { + .then(function () { return ch.get(q, { noAck: false }); }) - .then(function(m) { + .then(function (m) { assert.equal(msg1, m.content.toString()); ch.reject(m); return waitForMessages(q); }) - .then(function() { + .then(function () { return ch.get(q); }) - .then(function(m) { + .then(function (m) { assert(m); assert.equal(msg1, m.content.toString()); }); }); - chtest('prefetch', function(ch) { - var q = 'test.prefetch'; + chtest("prefetch", function (ch) { + var q = "test.prefetch"; return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.prefetch(1)) - .then(function() { - ch.sendToQueue(q, Buffer.from('foobar')); - ch.sendToQueue(q, Buffer.from('foobar')); + .then(function () { + ch.sendToQueue(q, Buffer.from("foobar")); + ch.sendToQueue(q, Buffer.from("foobar")); return waitForMessages(q, 2); }) - .then(function() { - return new Promise(function(resolve) { + .then(function () { + return new Promise(function (resolve) { var messageCount = 0; function receive(msg) { ch.ack(msg); @@ -501,25 +500,25 @@ suite('binding, consuming', function() { return ch.consume(q, receive, { noAck: false }); }); }) - .then(function(c) { + .then(function (c) { return assert.equal(2, c); }); }); - chtest('close', function(ch) { + chtest("close", function (ch) { // Resolving promise guarantees // channel is closed return ch.close(); }); }); -var confirmtest = channel_test.bind(null, 'createConfirmChannel'); +var confirmtest = channel_test.bind(null, "createConfirmChannel"); -suite('confirms', function() { - confirmtest('message is confirmed', function(ch) { - var q = 'test.confirm-message'; - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)).then(function() { - return ch.sendToQueue(q, Buffer.from('bleep')); +suite("confirms", function () { + confirmtest("message is confirmed", function (ch) { + var q = "test.confirm-message"; + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)).then(function () { + return ch.sendToQueue(q, Buffer.from("bleep")); }); }); @@ -528,11 +527,11 @@ suite('confirms', function() { // succession; a bit unscientific I know. Luckily we can eavesdrop on // the acknowledgements coming through to see if we really did get a // multi-ack. - confirmtest('multiple confirms', function(ch) { - var q = 'test.multiple-confirms'; - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)).then(function() { + confirmtest("multiple confirms", function (ch) { + var q = "test.multiple-confirms"; + return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)).then(function () { var multipleRainbows = false; - ch.on('ack', function(a) { + ch.on("ack", function (a) { if (a.multiple) multipleRainbows = true; }); @@ -540,17 +539,17 @@ suite('confirms', function() { var cs = []; function sendAndPushPromise() { - var conf = Promise.fromCallback(function(cb) { - return ch.sendToQueue(q, Buffer.from('bleep'), {}, cb); + var conf = Promise.fromCallback(function (cb) { + return ch.sendToQueue(q, Buffer.from("bleep"), {}, cb); }); cs.push(conf); } for (var i = 0; i < num; i++) sendAndPushPromise(); - return Promise.all(cs).then(function() { + return Promise.all(cs).then(function () { if (multipleRainbows) return true; - else if (num > 500) throw new Error("Couldn't provoke the server" + ' into multi-acking with ' + num + ' messages; giving up'); + else if (num > 500) throw new Error("Couldn't provoke the server" + " into multi-acking with " + num + " messages; giving up"); else { //console.warn("Failed with " + num + "; trying " + num * 2); return prod(num * 2); @@ -561,29 +560,29 @@ suite('confirms', function() { }); }); - confirmtest('wait for confirms', function(ch) { + confirmtest("wait for confirms", function (ch) { for (var i = 0; i < 1000; i++) { - ch.publish('', '', Buffer.from('foobar'), {}); + ch.publish("", "", Buffer.from("foobar"), {}); } return ch.waitForConfirms(); }); - confirmtest('works when channel is closed', function(ch) { + confirmtest("works when channel is closed", function (ch) { for (var i = 0; i < 1000; i++) { - ch.publish('', '', Buffer.from('foobar'), {}); + ch.publish("", "", Buffer.from("foobar"), {}); } return ch .close() - .then(function() { + .then(function () { return ch.waitForConfirms(); }) .then( - function() { - assert.strictEqual(true, false, 'Wait should have failed.'); + function () { + assert.strictEqual(true, false, "Wait should have failed."); + }, + function (e) { + assert.strictEqual(e.message, "channel closed"); }, - function(e) { - assert.strictEqual(e.message, 'channel closed'); - } ); }); }); diff --git a/test/util.js b/test/util.js index a41a8eb3..8bef18e5 100644 --- a/test/util.js +++ b/test/util.js @@ -1,24 +1,19 @@ -'use strict'; +"use strict"; -var Promise = require('bluebird'); -var crypto = require('crypto'); -var Connection = require('../lib/connection').Connection; -var PassThrough = - require('stream').PassThrough || - require('readable-stream/passthrough'); -var defs = require('../lib/defs'); -var assert = require('assert'); +var crypto = require("crypto"); +var Connection = require("../lib/connection").Connection; +var PassThrough = require("stream").PassThrough || require("readable-stream/passthrough"); +var defs = require("../lib/defs"); +var assert = require("assert"); -var schedule = (typeof setImmediate === 'function') ? - setImmediate : process.nextTick; +var schedule = typeof setImmediate === "function" ? setImmediate : process.nextTick; function randomString() { - var hash = crypto.createHash('sha1'); + var hash = crypto.createHash("sha1"); hash.update(crypto.randomBytes(64)); - return hash.digest('base64'); + return hash.digest("base64"); } - // Set up a socket pair {client, server}, such that writes to the // client are readable from the server, and writes to the server are // readable at the client. @@ -47,7 +42,7 @@ function socketPair() { server.end = end.bind(client); client.end = end.bind(server); - return {client: client, server: server}; + return { client: client, server: server }; } function runServer(socket, run) { @@ -63,34 +58,27 @@ function runServer(socket, run) { function send(id, fields, channel, content) { channel = channel || 0; if (content) { - schedule(function() { - frames.sendMessage(channel, id, fields, - defs.BasicProperties, fields, - content); + schedule(function () { + frames.sendMessage(channel, id, fields, defs.BasicProperties, fields, content); }); - } - else { - schedule(function() { + } else { + schedule(function () { frames.sendMethod(channel, id, fields); }); } } function wait(method) { - return function() { - return new Promise(function(resolve, reject) { + return function () { + return new Promise(function (resolve, reject) { if (method) { - frames.step(function(e, f) { + frames.step(function (e, f) { if (e !== null) return reject(e); - if (f.id === method) - resolve(f); - else - reject(new Error("Expected method: " + method + - ", got " + f.id)); + if (f.id === method) resolve(f); + else reject(new Error("Expected method: " + method + ", got " + f.id)); }); - } - else { - frames.step(function(e, f) { + } else { + frames.step(function (e, f) { if (e !== null) return reject(e); else resolve(f); }); @@ -104,14 +92,16 @@ function runServer(socket, run) { // Produce a callback that will complete the test successfully function succeed(done) { - return function() { done(); } + return function () { + done(); + }; } // Produce a callback that will complete the test successfully // only if the value is an object, it has the specified // attribute, and its value is equals to the expected value function succeedIfAttributeEquals(attribute, value, done) { - return function(object) { + return function (object) { if (object && !(object instanceof Error) && value === object[attribute]) { return done(); } @@ -124,10 +114,10 @@ function succeedIfAttributeEquals(attribute, value, done) { // (to be used as a failure continuation) or any other value (to be // used as a success continuation when failure is expected) function fail(done) { - return function(err) { + return function (err) { if (err instanceof Error) done(err); else done(new Error("Expected to fail, instead got " + err.toString())); - } + }; } // Create a function that will call done once it's been called itself @@ -136,12 +126,11 @@ function fail(done) { function latch(count, done) { var awaiting = count; var alive = true; - return function(err) { + return function (err) { if (err instanceof Error && alive) { alive = false; done(err); - } - else { + } else { awaiting--; if (awaiting === 0 && alive) { alive = false; @@ -157,14 +146,15 @@ function completes(thunk, done) { try { thunk(); done(); + } catch (e) { + done(e); } - catch (e) { done(e); } } // Construct a Node.JS-style callback from a success continuation and // an error continuation function kCallback(k, ek) { - return function(err, val) { + return function (err, val) { if (err === null) k && k(val); else ek && ek(err); }; @@ -172,37 +162,37 @@ function kCallback(k, ek) { // A noddy way to make tests depend on the node version. function versionGreaterThan(actual, spec) { + function int(e) { + return parseInt(e); + } - function int(e) { return parseInt(e); } - - var version = actual.split('.').map(int); - var desired = spec.split('.').map(int); - for (var i=0; i < desired.length; i++) { - var a = version[i], b = desired[i]; + var version = actual.split(".").map(int); + var desired = spec.split(".").map(int); + for (var i = 0; i < desired.length; i++) { + var a = version[i], + b = desired[i]; if (a != b) return a > b; } return false; } -suite('versionGreaterThan', function() { - -test('full spec', function() { - assert(versionGreaterThan('0.8.26', '0.6.12')); - assert(versionGreaterThan('0.8.26', '0.8.21')); -}); +suite("versionGreaterThan", function () { + test("full spec", function () { + assert(versionGreaterThan("0.8.26", "0.6.12")); + assert(versionGreaterThan("0.8.26", "0.8.21")); + }); -test('partial spec', function() { - assert(versionGreaterThan('0.9.12', '0.8')); -}); - -test('not greater', function() { - assert(!versionGreaterThan('0.8.12', '0.8.26')); - assert(!versionGreaterThan('0.6.2', '0.6.12')); - assert(!versionGreaterThan('0.8.29', '0.8')); -}); + test("partial spec", function () { + assert(versionGreaterThan("0.9.12", "0.8")); + }); -test + test("not greater", function () { + assert(!versionGreaterThan("0.8.12", "0.8.26")); + assert(!versionGreaterThan("0.6.2", "0.6.12")); + assert(!versionGreaterThan("0.8.29", "0.8")); + }); + test; }); module.exports = { @@ -216,5 +206,5 @@ module.exports = { kCallback: kCallback, schedule: schedule, randomString: randomString, - versionGreaterThan: versionGreaterThan + versionGreaterThan: versionGreaterThan, }; From 73dfe6abef562978dc41f73608081160dab5fb71 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 15 Dec 2020 22:42:31 +0000 Subject: [PATCH 06/30] Return to npm --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6984aa79..98bd8726 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,7 @@ bin/amqp-rabbitmq-0.9.1.json: curl -L $(AMQP_JSON) > $@ $(ISTANBUL): - pnpm install + npm install $(UGLIFY): - pnpm install + npm install From 0e70245ca08e7d154e0f5441d2708fbad411582d Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 15 Dec 2020 23:06:03 +0000 Subject: [PATCH 07/30] Update lockfile --- pnpm-debug.log | 22 ---------------------- pnpm-lock.yaml | 20 +++++++++----------- 2 files changed, 9 insertions(+), 33 deletions(-) delete mode 100644 pnpm-debug.log diff --git a/pnpm-debug.log b/pnpm-debug.log deleted file mode 100644 index 2b5e56bd..00000000 --- a/pnpm-debug.log +++ /dev/null @@ -1,22 +0,0 @@ -{ - "0 debug pnpm:scope": { - "selected": 1, - "workspacePrefix": null - }, - "1 error pnpm": { - "message": { - "errno": 2, - "code": "ELIFECYCLE", - "pkgid": "amqplib@0.5.5", - "stage": "test", - "script": "make test", - "pkgname": "amqplib" - }, - "err": { - "name": "Error", - "message": "amqplib@0.5.5 test: `make test`\nExit status 2", - "code": "ELIFECYCLE", - "stack": "Error: amqplib@0.5.5 test: `make test`\nExit status 2\n at EventEmitter. (/home/jeremyc/.nvm/versions/node/v12.9.0/lib/node_modules/pnpm/lib/node_modules/@zkochan/npm-lifecycle/index.js:302:16)\n at EventEmitter.emit (events.js:209:13)\n at ChildProcess. (/home/jeremyc/.nvm/versions/node/v12.9.0/lib/node_modules/pnpm/lib/node_modules/@zkochan/npm-lifecycle/lib/spawn.js:55:14)\n at ChildProcess.emit (events.js:209:13)\n at maybeClose (internal/child_process.js:1021:16)\n at Process.ChildProcess._handle.onexit (internal/child_process.js:283:5)" - } - } -} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6bc85c9a..97483a74 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,6 +1,6 @@ dependencies: bitsyntax: 0.1.0 - bluebird: 3.7.1 + bluebird: 3.7.2 buffer-more-ints: 1.0.0 readable-stream: 1.1.14 safe-buffer: 5.1.2 @@ -16,10 +16,6 @@ packages: dev: true resolution: integrity: sha1-kbR5JYinc4wl813W9jdSovh3YTU= - /abbrev/1.1.1: - dev: true - resolution: - integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== /align-text/0.1.4: dependencies: kind-of: 3.2.2 @@ -54,10 +50,10 @@ packages: node: '>=0.8' resolution: integrity: sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== - /bluebird/3.7.1: + /bluebird/3.7.2: dev: false resolution: - integrity: sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== /boo/1.2.4: dev: true resolution: @@ -383,12 +379,14 @@ packages: resolution: integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= /mkdirp/0.3.5: + deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) dev: true resolution: integrity: sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= /mkdirp/0.5.1: dependencies: minimist: 0.0.8 + deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) dev: true hasBin: true resolution: @@ -419,7 +417,7 @@ packages: integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= /nopt/2.1.2: dependencies: - abbrev: 1.1.1 + abbrev: 1.0.9 dev: true hasBin: true resolution: @@ -448,10 +446,10 @@ packages: node: '>= 0.8.0' resolution: integrity: sha1-z4JLS0fMc8vZb56YhQc7Q6rqqzs= - /querystringify/2.1.1: + /querystringify/2.2.0: dev: false resolution: - integrity: sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== /readable-stream/1.1.14: dependencies: core-util-is: 1.0.2 @@ -553,7 +551,7 @@ packages: integrity: sha1-bgkk1r2mta/jSeOabWMoUKD4grc= /url-parse/1.4.7: dependencies: - querystringify: 2.1.1 + querystringify: 2.2.0 requires-port: 1.0.0 dev: false resolution: From 92e29f21ca111301eccfa732dfe46046d78d885a Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Thu, 17 Dec 2020 20:02:25 +0000 Subject: [PATCH 08/30] use pnpm --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 98bd8726..8b438b23 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,7 @@ bin/amqp-rabbitmq-0.9.1.json: curl -L $(AMQP_JSON) > $@ $(ISTANBUL): - npm install + pnpm install #--production=false $(UGLIFY): - npm install + pnpm install #--production=false From 88a6cd7b9637e9a61fcd0e9d5278bba035cbd79c Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Thu, 17 Dec 2020 20:04:45 +0000 Subject: [PATCH 09/30] Update to npm and force all deps to be installed --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8b438b23..be912c85 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,7 @@ bin/amqp-rabbitmq-0.9.1.json: curl -L $(AMQP_JSON) > $@ $(ISTANBUL): - pnpm install #--production=false + npm install --production=false $(UGLIFY): - pnpm install #--production=false + npm install --production=false From 2181e94d73c534fd236c1a83b97c82799163ba46 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 22 Dec 2020 16:34:43 +0000 Subject: [PATCH 10/30] Update package versions --- package.json | 14 +- pnpm-lock.yaml | 933 ++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 741 insertions(+), 206 deletions(-) diff --git a/package.json b/package.json index 7400703d..2eb54ad7 100644 --- a/package.json +++ b/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "bitsyntax": "~0.1.0", - "bluebird": "^3.5.2", + "bluebird": "^3.7.2", "buffer-more-ints": "~1.0.0", - "readable-stream": "1.x >=1.1.9", - "safe-buffer": "~5.1.2", - "url-parse": "~1.4.3" + "readable-stream": "3.x", + "safe-buffer": "~5.2.1", + "url-parse": "~1.4.7" }, "devDependencies": { "claire": "0.4.1", - "istanbul": "0.1.x", - "mocha": "^3.5.3", - "uglify-js": "2.6.x" + "istanbul": "0.4.x", + "mocha": "^8.2.1", + "uglify-js": "^3.12.2" }, "scripts": { "test": "make test", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 97483a74..2cd19bf6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,16 +2,20 @@ dependencies: bitsyntax: 0.1.0 bluebird: 3.7.2 buffer-more-ints: 1.0.0 - readable-stream: 1.1.14 - safe-buffer: 5.1.2 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 url-parse: 1.4.7 devDependencies: claire: 0.4.1 - istanbul: 0.1.46 - mocha: 3.5.3 - uglify-js: 2.6.4 + istanbul: 0.4.5 + mocha: 8.2.1 + uglify-js: 2.8.29 lockfileVersion: 5.2 packages: + /@ungap/promise-all-settled/1.1.2: + dev: true + resolution: + integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== /abbrev/1.0.9: dev: true resolution: @@ -30,16 +34,72 @@ packages: dev: true engines: node: '>=0.4.2' + optional: true resolution: integrity: sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - /async/0.2.10: + /ansi-colors/4.1.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + /ansi-regex/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + /ansi-regex/4.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + /ansi-styles/3.2.1: + dependencies: + color-convert: 1.9.3 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + /ansi-styles/4.3.0: + dependencies: + color-convert: 2.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + /anymatch/3.1.1: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.2.2 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + /argparse/1.0.10: + dependencies: + sprintf-js: 1.0.3 dev: true resolution: - integrity: sha1-trvgsGdLnXGXCMo43owjfLUmw9E= + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + /async/1.5.2: + dev: true + resolution: + integrity: sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= /balanced-match/1.0.0: dev: true resolution: integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + /binary-extensions/2.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== /bitsyntax/0.1.0: dependencies: buffer-more-ints: 1.0.0 @@ -65,10 +125,18 @@ packages: dev: true resolution: integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - /browser-stdout/1.3.0: + /braces/3.0.2: + dependencies: + fill-range: 7.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + /browser-stdout/1.3.1: dev: true resolution: - integrity: sha1-81HTKWnTL6XXpVZxVCY9korjvR8= + integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== /buffer-more-ints/1.0.0: dev: false resolution: @@ -79,6 +147,18 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + /camelcase/5.3.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + /camelcase/6.2.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== /center-align/0.1.3: dependencies: align-text: 0.1.4 @@ -88,6 +168,31 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + /chalk/4.1.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + /chokidar/3.4.3: + dependencies: + anymatch: 3.1.1 + braces: 3.0.2 + glob-parent: 5.1.1 + is-binary-path: 2.1.0 + is-glob: 4.0.1 + normalize-path: 3.0.0 + readdirp: 3.5.0 + dev: true + engines: + node: '>= 8.10.0' + optionalDependencies: + fsevents: 2.1.3 + resolution: + integrity: sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== /claire/0.4.1: dependencies: boo: 1.2.4 @@ -104,84 +209,167 @@ packages: dev: true resolution: integrity: sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= - /commander/2.9.0: + /cliui/5.0.0: + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + dev: true + resolution: + integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + /color-convert/1.9.3: dependencies: - graceful-readlink: 1.0.1 + color-name: 1.1.3 + dev: true + resolution: + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + /color-convert/2.0.1: + dependencies: + color-name: 1.1.4 dev: true engines: - node: '>= 0.6.x' + node: '>=7.0.0' resolution: - integrity: sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= - /concat-map/0.0.1: + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + /color-name/1.1.3: dev: true resolution: - integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - /core-util-is/1.0.2: - dev: false + integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + /color-name/1.1.4: + dev: true resolution: - integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - /debug/2.6.8: - dependencies: - ms: 2.0.0 + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + /concat-map/0.0.1: dev: true resolution: - integrity: sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw= + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= /debug/2.6.9: dependencies: ms: 2.0.0 dev: false resolution: integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /debug/4.2.0_supports-color@7.2.0: + dependencies: + ms: 2.1.2 + supports-color: 7.2.0 + deprecated: 'Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)' + dev: true + engines: + node: '>=6.0' + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + resolution: + integrity: sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== /decamelize/1.2.0: dev: true engines: node: '>=0.10.0' resolution: integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - /diff/3.2.0: + /decamelize/4.0.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + /deep-is/0.1.3: + dev: true + resolution: + integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + /diff/4.0.2: dev: true engines: node: '>=0.3.1' resolution: - integrity: sha1-yc45Okt8vQsFinJck98pkCeGj/k= - /escape-string-regexp/1.0.5: + integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + /emoji-regex/7.0.3: + dev: true + resolution: + integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + /escape-string-regexp/4.0.0: dev: true engines: - node: '>=0.8.0' + node: '>=10' resolution: - integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - /escodegen/0.0.23: + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + /escodegen/1.8.1: dependencies: - esprima: 1.0.4 - estraverse: 0.0.4 + esprima: 2.7.3 + estraverse: 1.9.3 + esutils: 2.0.3 + optionator: 0.8.3 dev: true engines: - node: '>=0.4.0' + node: '>=0.12.0' hasBin: true optionalDependencies: - source-map: 0.7.3 + source-map: 0.2.0 resolution: - integrity: sha1-ms+XgWQ2jkInZXHxiDnII7OoRN8= - /esprima/1.0.4: + integrity: sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= + /esprima/2.7.3: dev: true engines: - node: '>=0.4.0' + node: '>=0.10.0' hasBin: true resolution: - integrity: sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= - /estraverse/0.0.4: + integrity: sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + /esprima/4.0.1: dev: true engines: - node: '>=0.4.0' + node: '>=4' + hasBin: true + resolution: + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + /estraverse/1.9.3: + dev: true + engines: + node: '>=0.10.0' resolution: - integrity: sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI= - /fileset/0.1.8: + integrity: sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + /esutils/2.0.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + /fast-levenshtein/2.0.6: + dev: true + resolution: + integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + /fill-range/7.0.1: dependencies: - glob: 3.2.11 - minimatch: 0.4.0 + to-regex-range: 5.0.1 dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + /find-up/3.0.0: + dependencies: + locate-path: 3.0.0 + dev: true + engines: + node: '>=6' resolution: - integrity: sha1-UGuRqTluqn4y+0KoQHfHoMc2t0E= + integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + /find-up/5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + /flat/5.0.2: + dev: true + hasBin: true + resolution: + integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== /flaw/0.1.0: dev: true resolution: @@ -190,16 +378,32 @@ packages: dev: true resolution: integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - /glob/3.2.11: + /fsevents/2.1.3: + deprecated: Please update to v 2.2.x + dev: true + engines: + node: ^8.16.0 || ^10.6.0 || >=11.0.0 + optional: true + os: + - darwin + resolution: + integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + /get-caller-file/2.0.5: + dev: true + engines: + node: 6.* || 8.* || >= 10.* + resolution: + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + /glob-parent/5.1.1: dependencies: - inherits: 2.0.4 - minimatch: 0.3.0 + is-glob: 4.0.1 dev: true + engines: + node: '>= 6' resolution: - integrity: sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0= - /glob/7.1.1: + integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + /glob/5.0.15: dependencies: - fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 minimatch: 3.0.4 @@ -207,36 +411,55 @@ packages: path-is-absolute: 1.0.1 dev: true resolution: - integrity: sha1-gFIR3wT6rxxjo2ADBs31reULLsg= - /graceful-readlink/1.0.1: + integrity: sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + /glob/7.1.6: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 dev: true resolution: - integrity: sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= - /growl/1.9.2: + integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + /growl/1.10.5: dev: true + engines: + node: '>=4.x' resolution: - integrity: sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= - /handlebars/1.0.12: + integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + /handlebars/4.7.6: dependencies: - optimist: 0.3.7 - uglify-js: 2.3.6 + minimist: 1.2.5 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 dev: true engines: node: '>=0.4.7' hasBin: true + optionalDependencies: + uglify-js: 3.12.2 resolution: - integrity: sha1-GMbTRAw16RsZs/9YK5FRq0mF1Pw= + integrity: sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== /has-flag/1.0.0: dev: true engines: node: '>=0.10.0' resolution: integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - /he/1.1.1: + /has-flag/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + /he/1.2.0: dev: true hasBin: true resolution: - integrity: sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== /inflight/1.0.6: dependencies: once: 1.4.0 @@ -247,27 +470,70 @@ packages: /inherits/2.0.4: resolution: integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /is-binary-path/2.1.0: + dependencies: + binary-extensions: 2.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== /is-buffer/1.1.6: dev: true resolution: integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - /isarray/0.0.1: - dev: false + /is-extglob/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + /is-fullwidth-code-point/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + /is-glob/4.0.1: + dependencies: + is-extglob: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + /is-number/7.0.0: + dev: true + engines: + node: '>=0.12.0' + resolution: + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + /is-plain-obj/2.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + /isexe/2.0.0: + dev: true resolution: - integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - /istanbul/0.1.46: + integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + /istanbul/0.4.5: dependencies: abbrev: 1.0.9 - async: 0.2.10 - escodegen: 0.0.23 - esprima: 1.0.4 - fileset: 0.1.8 - handlebars: 1.0.12 - mkdirp: 0.3.5 - nopt: 2.1.2 - resolve: 0.5.1 - which: 1.0.9 - wordwrap: 0.0.3 + async: 1.5.2 + escodegen: 1.8.1 + esprima: 2.7.3 + glob: 5.0.15 + handlebars: 4.7.6 + js-yaml: 3.14.1 + mkdirp: 0.5.1 + nopt: 3.0.6 + once: 1.4.0 + resolve: 1.1.7 + supports-color: 3.1.2 + which: 1.3.1 + wordwrap: 1.0.0 deprecated: |- This module is no longer maintained, try this instead: npm i nyc @@ -275,12 +541,23 @@ packages: dev: true hasBin: true resolution: - integrity: sha1-zv6xx4fRJabbI70PY7Drk5CwtA0= - /json3/3.3.2: - deprecated: Please use the native JSON object instead of JSON 3 + integrity: sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= + /js-yaml/3.14.0: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 dev: true + hasBin: true resolution: - integrity: sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= + integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + /js-yaml/3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + hasBin: true + resolution: + integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== /kind-of/3.2.2: dependencies: is-buffer: 1.1.6 @@ -295,79 +572,46 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-odePw6UEdMuAhF07O24dpJpEbo4= - /lodash._baseassign/3.2.0: + /levn/0.3.0: dependencies: - lodash._basecopy: 3.0.1 - lodash.keys: 3.1.2 - dev: true - resolution: - integrity: sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= - /lodash._basecopy/3.0.1: - dev: true - resolution: - integrity: sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= - /lodash._basecreate/3.0.3: - dev: true - resolution: - integrity: sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE= - /lodash._getnative/3.9.1: - dev: true - resolution: - integrity: sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - /lodash._isiterateecall/3.0.9: + prelude-ls: 1.1.2 + type-check: 0.3.2 dev: true + engines: + node: '>= 0.8.0' resolution: - integrity: sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= - /lodash.create/3.1.1: + integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + /locate-path/3.0.0: dependencies: - lodash._baseassign: 3.2.0 - lodash._basecreate: 3.0.3 - lodash._isiterateecall: 3.0.9 - dev: true - resolution: - integrity: sha1-1/KEnw29p+BGgruM1yqwIkYd6+c= - /lodash.isarguments/3.1.0: + p-locate: 3.0.0 + path-exists: 3.0.0 dev: true + engines: + node: '>=6' resolution: - integrity: sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= - /lodash.isarray/3.0.4: + integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + /locate-path/6.0.0: + dependencies: + p-locate: 5.0.0 dev: true + engines: + node: '>=10' resolution: - integrity: sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= - /lodash.keys/3.1.2: + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + /log-symbols/4.0.0: dependencies: - lodash._getnative: 3.9.1 - lodash.isarguments: 3.1.0 - lodash.isarray: 3.0.4 + chalk: 4.1.0 dev: true + engines: + node: '>=10' resolution: - integrity: sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= + integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== /longest/1.0.1: dev: true engines: node: '>=0.10.0' resolution: integrity: sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= - /lru-cache/2.7.3: - dev: true - resolution: - integrity: sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= - /minimatch/0.3.0: - dependencies: - lru-cache: 2.7.3 - sigmund: 1.0.1 - deprecated: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue - dev: true - resolution: - integrity: sha1-J12O2qxPG7MyZHIInnlJyDlGmd0= - /minimatch/0.4.0: - dependencies: - lru-cache: 2.7.3 - sigmund: 1.0.1 - deprecated: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue - dev: true - resolution: - integrity: sha1-vSx9Bg0sjI/Xzefx8u0tWycP2xs= /minimatch/3.0.4: dependencies: brace-expansion: 1.1.11 @@ -378,11 +622,10 @@ packages: dev: true resolution: integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - /mkdirp/0.3.5: - deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) + /minimist/1.2.5: dev: true resolution: - integrity: sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= + integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== /mkdirp/0.5.1: dependencies: minimist: 0.0.8 @@ -391,88 +634,216 @@ packages: hasBin: true resolution: integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - /mocha/3.5.3: - dependencies: - browser-stdout: 1.3.0 - commander: 2.9.0 - debug: 2.6.8 - diff: 3.2.0 - escape-string-regexp: 1.0.5 - glob: 7.1.1 - growl: 1.9.2 - he: 1.1.1 - json3: 3.3.2 - lodash.create: 3.1.1 - mkdirp: 0.5.1 - supports-color: 3.1.2 + /mocha/8.2.1: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.4.3 + debug: 4.2.0_supports-color@7.2.0 + diff: 4.0.2 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.1.6 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 3.14.0 + log-symbols: 4.0.0 + minimatch: 3.0.4 + ms: 2.1.2 + nanoid: 3.1.12 + serialize-javascript: 5.0.1 + strip-json-comments: 3.1.1 + supports-color: 7.2.0 + which: 2.0.2 + wide-align: 1.1.3 + workerpool: 6.0.2 + yargs: 13.3.2 + yargs-parser: 13.1.2 + yargs-unparser: 2.0.0 dev: true engines: - node: '>= 0.10.x' - npm: '>= 1.4.x' + node: '>= 10.12.0' hasBin: true resolution: - integrity: sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg== + integrity: sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== /ms/2.0.0: + dev: false resolution: integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - /nopt/2.1.2: + /ms/2.1.2: + dev: true + resolution: + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + /nanoid/3.1.12: + dev: true + engines: + node: ^10 || ^12 || >=13.7 + hasBin: true + resolution: + integrity: sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== + /neo-async/2.6.2: + dev: true + resolution: + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + /nopt/3.0.6: dependencies: abbrev: 1.0.9 dev: true hasBin: true resolution: - integrity: sha1-bMzZd7gBMqB3MdbozljCyDA8+a8= + integrity: sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + /normalize-path/3.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== /once/1.4.0: dependencies: wrappy: 1.0.2 dev: true resolution: integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - /optimist/0.3.7: + /optionator/0.8.3: + dependencies: + deep-is: 0.1.3 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.3 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + /p-limit/2.3.0: + dependencies: + p-try: 2.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + /p-limit/3.1.0: + dependencies: + yocto-queue: 0.1.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + /p-locate/3.0.0: dependencies: - wordwrap: 0.0.3 + p-limit: 2.3.0 dev: true + engines: + node: '>=6' resolution: - integrity: sha1-yQlBrVnkJzMokjB00s8ufLxuwNk= + integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + /p-locate/5.0.0: + dependencies: + p-limit: 3.1.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + /p-try/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + /path-exists/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + /path-exists/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== /path-is-absolute/1.0.1: dev: true engines: node: '>=0.10.0' resolution: integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /picomatch/2.2.2: + dev: true + engines: + node: '>=8.6' + resolution: + integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== /prelude-ls/0.6.0: dev: true engines: node: '>= 0.8.0' resolution: integrity: sha1-z4JLS0fMc8vZb56YhQc7Q6rqqzs= + /prelude-ls/1.1.2: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= /querystringify/2.2.0: dev: false resolution: integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - /readable-stream/1.1.14: + /randombytes/2.1.0: + dependencies: + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + /readable-stream/3.6.0: dependencies: - core-util-is: 1.0.2 inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 dev: false + engines: + node: '>= 6' resolution: - integrity: sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + /readdirp/3.5.0: + dependencies: + picomatch: 2.2.2 + dev: true + engines: + node: '>=8.10.0' + resolution: + integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== /repeat-string/1.6.1: dev: true engines: node: '>=0.10' resolution: integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc= + /require-directory/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + /require-main-filename/2.0.0: + dev: true + resolution: + integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== /requires-port/1.0.0: dev: false resolution: integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - /resolve/0.5.1: + /resolve/1.1.7: dev: true resolution: - integrity: sha1-FeSiIsQja81M+FRUQSwtD7ZSRXY= + integrity: sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= /right-align/0.1.3: dependencies: align-text: 0.1.4 @@ -485,35 +856,91 @@ packages: dev: false resolution: integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - /sigmund/1.0.1: + /safe-buffer/5.2.1: + resolution: + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + /serialize-javascript/5.0.1: + dependencies: + randombytes: 2.1.0 dev: true resolution: - integrity: sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= - /source-map/0.1.43: + integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + /set-blocking/2.0.0: + dev: true + resolution: + integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + /source-map/0.2.0: dependencies: amdefine: 1.0.1 dev: true engines: node: '>=0.8.0' + optional: true resolution: - integrity: sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= + integrity: sha1-2rc/vPwrqBm03gO9b26qSBZLP50= /source-map/0.5.7: dev: true engines: node: '>=0.10.0' resolution: integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - /source-map/0.7.3: + /source-map/0.6.1: dev: true engines: - node: '>= 8' - optional: true + node: '>=0.10.0' resolution: - integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - /string_decoder/0.10.31: + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + /sprintf-js/1.0.3: + dev: true + resolution: + integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + /string-width/2.1.1: + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + /string-width/3.1.0: + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + /string_decoder/1.3.0: + dependencies: + safe-buffer: 5.2.1 dev: false resolution: - integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + /strip-ansi/4.0.0: + dependencies: + ansi-regex: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= + /strip-ansi/5.2.0: + dependencies: + ansi-regex: 4.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + /strip-json-comments/3.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== /supports-color/3.1.2: dependencies: has-flag: 1.0.0 @@ -522,31 +949,53 @@ packages: node: '>=0.8.0' resolution: integrity: sha1-cqJiiU2dQIuVbKBf83su2KbiotU= - /uglify-js/2.3.6: + /supports-color/7.2.0: dependencies: - async: 0.2.10 - optimist: 0.3.7 - source-map: 0.1.43 + has-flag: 4.0.0 dev: true engines: - node: '>=0.4.0' - hasBin: true + node: '>=8' resolution: - integrity: sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo= - /uglify-js/2.6.4: + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + /to-regex-range/5.0.1: + dependencies: + is-number: 7.0.0 + dev: true + engines: + node: '>=8.0' + resolution: + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + /type-check/0.3.2: + dependencies: + prelude-ls: 1.1.2 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + /uglify-js/2.8.29: dependencies: - async: 0.2.10 source-map: 0.5.7 - uglify-to-browserify: 1.0.2 yargs: 3.10.0 dev: true engines: node: '>=0.8.0' hasBin: true + optionalDependencies: + uglify-to-browserify: 1.0.2 + resolution: + integrity: sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + /uglify-js/3.12.2: + dev: true + engines: + node: '>=0.8.0' + hasBin: true + optional: true resolution: - integrity: sha1-ZeovswWck5RpLxX+2HwrNsFrmt8= + integrity: sha512-rWYleAvfJPjduYCt+ELvzybNah/zIkRteGXIBO8X0lteRZPGladF61hFi8tU7qKTsF7u6DUQCtT9k00VlFOgkg== /uglify-to-browserify/1.0.2: dev: true + optional: true resolution: integrity: sha1-bgkk1r2mta/jSeOabWMoUKD4grc= /url-parse/1.4.7: @@ -556,33 +1005,113 @@ packages: dev: false resolution: integrity: sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== - /which/1.0.9: + /util-deprecate/1.0.2: + dev: false + resolution: + integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + /which-module/2.0.0: + dev: true + resolution: + integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + /which/1.3.1: + dependencies: + isexe: 2.0.0 dev: true hasBin: true resolution: - integrity: sha1-RgwdoPgQED0DIam2M6+eV15kSG8= + integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + /which/2.0.2: + dependencies: + isexe: 2.0.0 + dev: true + engines: + node: '>= 8' + hasBin: true + resolution: + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + /wide-align/1.1.3: + dependencies: + string-width: 2.1.1 + dev: true + resolution: + integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== /window-size/0.1.0: dev: true engines: node: '>= 0.8.0' resolution: integrity: sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + /word-wrap/1.2.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== /wordwrap/0.0.2: dev: true engines: node: '>=0.4.0' resolution: integrity: sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= - /wordwrap/0.0.3: + /wordwrap/1.0.0: + dev: true + resolution: + integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + /workerpool/6.0.2: + dev: true + resolution: + integrity: sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== + /wrap-ansi/5.1.0: + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 dev: true engines: - node: '>=0.4.0' + node: '>=6' resolution: - integrity: sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== /wrappy/1.0.2: dev: true resolution: integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /y18n/4.0.1: + dev: true + resolution: + integrity: sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + /yargs-parser/13.1.2: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + resolution: + integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + /yargs-unparser/2.0.0: + dependencies: + camelcase: 6.2.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + /yargs/13.3.2: + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.0 + y18n: 4.0.1 + yargs-parser: 13.1.2 + dev: true + resolution: + integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== /yargs/3.10.0: dependencies: camelcase: 1.2.1 @@ -592,14 +1121,20 @@ packages: dev: true resolution: integrity: sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + /yocto-queue/0.1.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== specifiers: bitsyntax: ~0.1.0 - bluebird: ^3.5.2 + bluebird: ^3.7.2 buffer-more-ints: ~1.0.0 claire: 0.4.1 - istanbul: 0.1.x - mocha: ^3.5.3 - readable-stream: 1.x >=1.1.9 - safe-buffer: ~5.1.2 - uglify-js: 2.6.x - url-parse: ~1.4.3 + istanbul: 0.4.x + mocha: ^8.2.1 + readable-stream: 3.x + safe-buffer: ~5.2.1 + uglify-js: ^2.6.4 + url-parse: ~1.4.7 From 302aea8c3802e011911a20a346e86eea4c5157c5 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 22 Dec 2020 17:13:13 +0000 Subject: [PATCH 11/30] Revert package version --- pnpm-lock.yaml | 605 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 605 insertions(+) create mode 100644 pnpm-lock.yaml diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..97483a74 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,605 @@ +dependencies: + bitsyntax: 0.1.0 + bluebird: 3.7.2 + buffer-more-ints: 1.0.0 + readable-stream: 1.1.14 + safe-buffer: 5.1.2 + url-parse: 1.4.7 +devDependencies: + claire: 0.4.1 + istanbul: 0.1.46 + mocha: 3.5.3 + uglify-js: 2.6.4 +lockfileVersion: 5.2 +packages: + /abbrev/1.0.9: + dev: true + resolution: + integrity: sha1-kbR5JYinc4wl813W9jdSovh3YTU= + /align-text/0.1.4: + dependencies: + kind-of: 3.2.2 + longest: 1.0.1 + repeat-string: 1.6.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + /amdefine/1.0.1: + dev: true + engines: + node: '>=0.4.2' + resolution: + integrity: sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + /async/0.2.10: + dev: true + resolution: + integrity: sha1-trvgsGdLnXGXCMo43owjfLUmw9E= + /balanced-match/1.0.0: + dev: true + resolution: + integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + /bitsyntax/0.1.0: + dependencies: + buffer-more-ints: 1.0.0 + debug: 2.6.9 + safe-buffer: 5.1.2 + dev: false + engines: + node: '>=0.8' + resolution: + integrity: sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== + /bluebird/3.7.2: + dev: false + resolution: + integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + /boo/1.2.4: + dev: true + resolution: + integrity: sha1-szMxw2xK552C9P0ORJBgTLfFE7U= + /brace-expansion/1.1.11: + dependencies: + balanced-match: 1.0.0 + concat-map: 0.0.1 + dev: true + resolution: + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /browser-stdout/1.3.0: + dev: true + resolution: + integrity: sha1-81HTKWnTL6XXpVZxVCY9korjvR8= + /buffer-more-ints/1.0.0: + dev: false + resolution: + integrity: sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== + /camelcase/1.2.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + /center-align/0.1.3: + dependencies: + align-text: 0.1.4 + lazy-cache: 1.0.4 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + /claire/0.4.1: + dependencies: + boo: 1.2.4 + flaw: 0.1.0 + prelude-ls: 0.6.0 + dev: true + resolution: + integrity: sha1-ynDcEmHd2PJaGvq604BcOfziY7w= + /cliui/2.1.0: + dependencies: + center-align: 0.1.3 + right-align: 0.1.3 + wordwrap: 0.0.2 + dev: true + resolution: + integrity: sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + /commander/2.9.0: + dependencies: + graceful-readlink: 1.0.1 + dev: true + engines: + node: '>= 0.6.x' + resolution: + integrity: sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= + /concat-map/0.0.1: + dev: true + resolution: + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /core-util-is/1.0.2: + dev: false + resolution: + integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + /debug/2.6.8: + dependencies: + ms: 2.0.0 + dev: true + resolution: + integrity: sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw= + /debug/2.6.9: + dependencies: + ms: 2.0.0 + dev: false + resolution: + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /decamelize/1.2.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + /diff/3.2.0: + dev: true + engines: + node: '>=0.3.1' + resolution: + integrity: sha1-yc45Okt8vQsFinJck98pkCeGj/k= + /escape-string-regexp/1.0.5: + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + /escodegen/0.0.23: + dependencies: + esprima: 1.0.4 + estraverse: 0.0.4 + dev: true + engines: + node: '>=0.4.0' + hasBin: true + optionalDependencies: + source-map: 0.7.3 + resolution: + integrity: sha1-ms+XgWQ2jkInZXHxiDnII7OoRN8= + /esprima/1.0.4: + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= + /estraverse/0.0.4: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI= + /fileset/0.1.8: + dependencies: + glob: 3.2.11 + minimatch: 0.4.0 + dev: true + resolution: + integrity: sha1-UGuRqTluqn4y+0KoQHfHoMc2t0E= + /flaw/0.1.0: + dev: true + resolution: + integrity: sha1-wMPo+BYWdTh+2tofbOhNZ5sCUn8= + /fs.realpath/1.0.0: + dev: true + resolution: + integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /glob/3.2.11: + dependencies: + inherits: 2.0.4 + minimatch: 0.3.0 + dev: true + resolution: + integrity: sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0= + /glob/7.1.1: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + resolution: + integrity: sha1-gFIR3wT6rxxjo2ADBs31reULLsg= + /graceful-readlink/1.0.1: + dev: true + resolution: + integrity: sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + /growl/1.9.2: + dev: true + resolution: + integrity: sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= + /handlebars/1.0.12: + dependencies: + optimist: 0.3.7 + uglify-js: 2.3.6 + dev: true + engines: + node: '>=0.4.7' + hasBin: true + resolution: + integrity: sha1-GMbTRAw16RsZs/9YK5FRq0mF1Pw= + /has-flag/1.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + /he/1.1.1: + dev: true + hasBin: true + resolution: + integrity: sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.4: + resolution: + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /is-buffer/1.1.6: + dev: true + resolution: + integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + /isarray/0.0.1: + dev: false + resolution: + integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + /istanbul/0.1.46: + dependencies: + abbrev: 1.0.9 + async: 0.2.10 + escodegen: 0.0.23 + esprima: 1.0.4 + fileset: 0.1.8 + handlebars: 1.0.12 + mkdirp: 0.3.5 + nopt: 2.1.2 + resolve: 0.5.1 + which: 1.0.9 + wordwrap: 0.0.3 + deprecated: |- + This module is no longer maintained, try this instead: + npm i nyc + Visit https://istanbul.js.org/integrations for other alternatives. + dev: true + hasBin: true + resolution: + integrity: sha1-zv6xx4fRJabbI70PY7Drk5CwtA0= + /json3/3.3.2: + deprecated: Please use the native JSON object instead of JSON 3 + dev: true + resolution: + integrity: sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= + /kind-of/3.2.2: + dependencies: + is-buffer: 1.1.6 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + /lazy-cache/1.0.4: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-odePw6UEdMuAhF07O24dpJpEbo4= + /lodash._baseassign/3.2.0: + dependencies: + lodash._basecopy: 3.0.1 + lodash.keys: 3.1.2 + dev: true + resolution: + integrity: sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= + /lodash._basecopy/3.0.1: + dev: true + resolution: + integrity: sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= + /lodash._basecreate/3.0.3: + dev: true + resolution: + integrity: sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE= + /lodash._getnative/3.9.1: + dev: true + resolution: + integrity: sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + /lodash._isiterateecall/3.0.9: + dev: true + resolution: + integrity: sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= + /lodash.create/3.1.1: + dependencies: + lodash._baseassign: 3.2.0 + lodash._basecreate: 3.0.3 + lodash._isiterateecall: 3.0.9 + dev: true + resolution: + integrity: sha1-1/KEnw29p+BGgruM1yqwIkYd6+c= + /lodash.isarguments/3.1.0: + dev: true + resolution: + integrity: sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= + /lodash.isarray/3.0.4: + dev: true + resolution: + integrity: sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= + /lodash.keys/3.1.2: + dependencies: + lodash._getnative: 3.9.1 + lodash.isarguments: 3.1.0 + lodash.isarray: 3.0.4 + dev: true + resolution: + integrity: sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= + /longest/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + /lru-cache/2.7.3: + dev: true + resolution: + integrity: sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= + /minimatch/0.3.0: + dependencies: + lru-cache: 2.7.3 + sigmund: 1.0.1 + deprecated: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue + dev: true + resolution: + integrity: sha1-J12O2qxPG7MyZHIInnlJyDlGmd0= + /minimatch/0.4.0: + dependencies: + lru-cache: 2.7.3 + sigmund: 1.0.1 + deprecated: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue + dev: true + resolution: + integrity: sha1-vSx9Bg0sjI/Xzefx8u0tWycP2xs= + /minimatch/3.0.4: + dependencies: + brace-expansion: 1.1.11 + dev: true + resolution: + integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /minimist/0.0.8: + dev: true + resolution: + integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + /mkdirp/0.3.5: + deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) + dev: true + resolution: + integrity: sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= + /mkdirp/0.5.1: + dependencies: + minimist: 0.0.8 + deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) + dev: true + hasBin: true + resolution: + integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + /mocha/3.5.3: + dependencies: + browser-stdout: 1.3.0 + commander: 2.9.0 + debug: 2.6.8 + diff: 3.2.0 + escape-string-regexp: 1.0.5 + glob: 7.1.1 + growl: 1.9.2 + he: 1.1.1 + json3: 3.3.2 + lodash.create: 3.1.1 + mkdirp: 0.5.1 + supports-color: 3.1.2 + dev: true + engines: + node: '>= 0.10.x' + npm: '>= 1.4.x' + hasBin: true + resolution: + integrity: sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg== + /ms/2.0.0: + resolution: + integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + /nopt/2.1.2: + dependencies: + abbrev: 1.0.9 + dev: true + hasBin: true + resolution: + integrity: sha1-bMzZd7gBMqB3MdbozljCyDA8+a8= + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /optimist/0.3.7: + dependencies: + wordwrap: 0.0.3 + dev: true + resolution: + integrity: sha1-yQlBrVnkJzMokjB00s8ufLxuwNk= + /path-is-absolute/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /prelude-ls/0.6.0: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-z4JLS0fMc8vZb56YhQc7Q6rqqzs= + /querystringify/2.2.0: + dev: false + resolution: + integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + /readable-stream/1.1.14: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + resolution: + integrity: sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + /repeat-string/1.6.1: + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc= + /requires-port/1.0.0: + dev: false + resolution: + integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + /resolve/0.5.1: + dev: true + resolution: + integrity: sha1-FeSiIsQja81M+FRUQSwtD7ZSRXY= + /right-align/0.1.3: + dependencies: + align-text: 0.1.4 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + /safe-buffer/5.1.2: + dev: false + resolution: + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + /sigmund/1.0.1: + dev: true + resolution: + integrity: sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= + /source-map/0.1.43: + dependencies: + amdefine: 1.0.1 + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= + /source-map/0.5.7: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + /source-map/0.7.3: + dev: true + engines: + node: '>= 8' + optional: true + resolution: + integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + /string_decoder/0.10.31: + dev: false + resolution: + integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + /supports-color/3.1.2: + dependencies: + has-flag: 1.0.0 + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-cqJiiU2dQIuVbKBf83su2KbiotU= + /uglify-js/2.3.6: + dependencies: + async: 0.2.10 + optimist: 0.3.7 + source-map: 0.1.43 + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo= + /uglify-js/2.6.4: + dependencies: + async: 0.2.10 + source-map: 0.5.7 + uglify-to-browserify: 1.0.2 + yargs: 3.10.0 + dev: true + engines: + node: '>=0.8.0' + hasBin: true + resolution: + integrity: sha1-ZeovswWck5RpLxX+2HwrNsFrmt8= + /uglify-to-browserify/1.0.2: + dev: true + resolution: + integrity: sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + /url-parse/1.4.7: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: false + resolution: + integrity: sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + /which/1.0.9: + dev: true + hasBin: true + resolution: + integrity: sha1-RgwdoPgQED0DIam2M6+eV15kSG8= + /window-size/0.1.0: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + /wordwrap/0.0.2: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + /wordwrap/0.0.3: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + /wrappy/1.0.2: + dev: true + resolution: + integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /yargs/3.10.0: + dependencies: + camelcase: 1.2.1 + cliui: 2.1.0 + decamelize: 1.2.0 + window-size: 0.1.0 + dev: true + resolution: + integrity: sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= +specifiers: + bitsyntax: ~0.1.0 + bluebird: ^3.5.2 + buffer-more-ints: ~1.0.0 + claire: 0.4.1 + istanbul: 0.1.x + mocha: ^3.5.3 + readable-stream: 1.x >=1.1.9 + safe-buffer: ~5.1.2 + uglify-js: 2.6.x + url-parse: ~1.4.3 From 13191b4d055fe9a54a2dd0d863b3140bf8164d1e Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 22 Dec 2020 17:17:10 +0000 Subject: [PATCH 12/30] Max uglify to 2.x.x --- package.json | 2 +- pnpm-lock.yaml | 186 ++++++++++++++++++++++++------------------------- 2 files changed, 94 insertions(+), 94 deletions(-) diff --git a/package.json b/package.json index 2eb54ad7..afef6102 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "claire": "0.4.1", "istanbul": "0.4.x", "mocha": "^8.2.1", - "uglify-js": "^3.12.2" + "uglify-js": "<3.0.0" }, "scripts": { "test": "make test", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a68ac01..23dd4de5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,32 +27,32 @@ packages: repeat-string: 1.6.1 dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= /amdefine/1.0.1: dev: true engines: - node: ">=0.4.2" + node: '>=0.4.2' optional: true resolution: integrity: sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= /ansi-colors/4.1.1: dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== /ansi-regex/3.0.0: dev: true engines: - node: ">=4" + node: '>=4' resolution: integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= /ansi-regex/4.1.0: dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== /ansi-styles/3.2.1: @@ -60,7 +60,7 @@ packages: color-convert: 1.9.3 dev: true engines: - node: ">=4" + node: '>=4' resolution: integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== /ansi-styles/4.3.0: @@ -68,7 +68,7 @@ packages: color-convert: 2.0.1 dev: true engines: - node: ">=8" + node: '>=8' resolution: integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== /anymatch/3.1.1: @@ -77,7 +77,7 @@ packages: picomatch: 2.2.2 dev: true engines: - node: ">= 8" + node: '>= 8' resolution: integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== /argparse/1.0.10: @@ -97,7 +97,7 @@ packages: /binary-extensions/2.1.0: dev: true engines: - node: ">=8" + node: '>=8' resolution: integrity: sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== /bitsyntax/0.1.0: @@ -107,7 +107,7 @@ packages: safe-buffer: 5.1.2 dev: false engines: - node: ">=0.8" + node: '>=0.8' resolution: integrity: sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== /bluebird/3.7.2: @@ -130,7 +130,7 @@ packages: fill-range: 7.0.1 dev: true engines: - node: ">=8" + node: '>=8' resolution: integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== /browser-stdout/1.3.1: @@ -144,19 +144,19 @@ packages: /camelcase/1.2.1: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= /camelcase/5.3.1: dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== /camelcase/6.2.0: dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== /center-align/0.1.3: @@ -165,7 +165,7 @@ packages: lazy-cache: 1.0.4 dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-qg0yYptu6XIgBBHL1EYckHvCt60= /chalk/4.1.0: @@ -174,7 +174,7 @@ packages: supports-color: 7.2.0 dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== /chokidar/3.4.3: @@ -188,7 +188,7 @@ packages: readdirp: 3.5.0 dev: true engines: - node: ">= 8.10.0" + node: '>= 8.10.0' optionalDependencies: fsevents: 2.1.3 resolution: @@ -228,7 +228,7 @@ packages: color-name: 1.1.4 dev: true engines: - node: ">=7.0.0" + node: '>=7.0.0' resolution: integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== /color-name/1.1.3: @@ -253,12 +253,12 @@ packages: dependencies: ms: 2.1.2 supports-color: 7.2.0 - deprecated: "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)" + deprecated: 'Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)' dev: true engines: - node: ">=6.0" + node: '>=6.0' peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true @@ -267,13 +267,13 @@ packages: /decamelize/1.2.0: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= /decamelize/4.0.0: dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== /deep-is/0.1.3: @@ -283,7 +283,7 @@ packages: /diff/4.0.2: dev: true engines: - node: ">=0.3.1" + node: '>=0.3.1' resolution: integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== /emoji-regex/7.0.3: @@ -293,7 +293,7 @@ packages: /escape-string-regexp/4.0.0: dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== /escodegen/1.8.1: @@ -304,7 +304,7 @@ packages: optionator: 0.8.3 dev: true engines: - node: ">=0.12.0" + node: '>=0.12.0' hasBin: true optionalDependencies: source-map: 0.2.0 @@ -313,27 +313,27 @@ packages: /esprima/2.7.3: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' hasBin: true resolution: integrity: sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= /esprima/4.0.1: dev: true engines: - node: ">=4" + node: '>=4' hasBin: true resolution: integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== /estraverse/1.9.3: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= /esutils/2.0.3: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== /fast-levenshtein/2.0.6: @@ -345,7 +345,7 @@ packages: to-regex-range: 5.0.1 dev: true engines: - node: ">=8" + node: '>=8' resolution: integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== /find-up/3.0.0: @@ -353,7 +353,7 @@ packages: locate-path: 3.0.0 dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== /find-up/5.0.0: @@ -362,7 +362,7 @@ packages: path-exists: 4.0.0 dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== /flat/5.0.2: @@ -399,7 +399,7 @@ packages: is-glob: 4.0.1 dev: true engines: - node: ">= 6" + node: '>= 6' resolution: integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== /glob/5.0.15: @@ -426,7 +426,7 @@ packages: /growl/1.10.5: dev: true engines: - node: ">=4.x" + node: '>=4.x' resolution: integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== /handlebars/4.7.6: @@ -437,7 +437,7 @@ packages: wordwrap: 1.0.0 dev: true engines: - node: ">=0.4.7" + node: '>=0.4.7' hasBin: true optionalDependencies: uglify-js: 3.12.2 @@ -446,13 +446,13 @@ packages: /has-flag/1.0.0: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= /has-flag/4.0.0: dev: true engines: - node: ">=8" + node: '>=8' resolution: integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== /he/1.2.0: @@ -475,7 +475,7 @@ packages: binary-extensions: 2.1.0 dev: true engines: - node: ">=8" + node: '>=8' resolution: integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== /is-buffer/1.1.6: @@ -485,13 +485,13 @@ packages: /is-extglob/2.1.1: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= /is-fullwidth-code-point/2.0.0: dev: true engines: - node: ">=4" + node: '>=4' resolution: integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= /is-glob/4.0.1: @@ -499,19 +499,19 @@ packages: is-extglob: 2.1.1 dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== /is-number/7.0.0: dev: true engines: - node: ">=0.12.0" + node: '>=0.12.0' resolution: integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== /is-plain-obj/2.1.0: dev: true engines: - node: ">=8" + node: '>=8' resolution: integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== /isexe/2.0.0: @@ -563,13 +563,13 @@ packages: is-buffer: 1.1.6 dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= /lazy-cache/1.0.4: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-odePw6UEdMuAhF07O24dpJpEbo4= /levn/0.3.0: @@ -578,7 +578,7 @@ packages: type-check: 0.3.2 dev: true engines: - node: ">= 0.8.0" + node: '>= 0.8.0' resolution: integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= /locate-path/3.0.0: @@ -587,7 +587,7 @@ packages: path-exists: 3.0.0 dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== /locate-path/6.0.0: @@ -595,7 +595,7 @@ packages: p-locate: 5.0.0 dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== /log-symbols/4.0.0: @@ -603,13 +603,13 @@ packages: chalk: 4.1.0 dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== /longest/1.0.1: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= /minimatch/3.0.4: @@ -636,7 +636,7 @@ packages: integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= /mocha/8.2.1: dependencies: - "@ungap/promise-all-settled": 1.1.2 + '@ungap/promise-all-settled': 1.1.2 ansi-colors: 4.1.1 browser-stdout: 1.3.1 chokidar: 3.4.3 @@ -663,7 +663,7 @@ packages: yargs-unparser: 2.0.0 dev: true engines: - node: ">= 10.12.0" + node: '>= 10.12.0' hasBin: true resolution: integrity: sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== @@ -696,7 +696,7 @@ packages: /normalize-path/3.0.0: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== /once/1.4.0: @@ -715,7 +715,7 @@ packages: word-wrap: 1.2.3 dev: true engines: - node: ">= 0.8.0" + node: '>= 0.8.0' resolution: integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== /p-limit/2.3.0: @@ -723,7 +723,7 @@ packages: p-try: 2.2.0 dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== /p-limit/3.1.0: @@ -731,7 +731,7 @@ packages: yocto-queue: 0.1.0 dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== /p-locate/3.0.0: @@ -739,7 +739,7 @@ packages: p-limit: 2.3.0 dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== /p-locate/5.0.0: @@ -747,49 +747,49 @@ packages: p-limit: 3.1.0 dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== /p-try/2.2.0: dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== /path-exists/3.0.0: dev: true engines: - node: ">=4" + node: '>=4' resolution: integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= /path-exists/4.0.0: dev: true engines: - node: ">=8" + node: '>=8' resolution: integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== /path-is-absolute/1.0.1: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= /picomatch/2.2.2: dev: true engines: - node: ">=8.6" + node: '>=8.6' resolution: integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== /prelude-ls/0.6.0: dev: true engines: - node: ">= 0.8.0" + node: '>= 0.8.0' resolution: integrity: sha1-z4JLS0fMc8vZb56YhQc7Q6rqqzs= /prelude-ls/1.1.2: dev: true engines: - node: ">= 0.8.0" + node: '>= 0.8.0' resolution: integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= /querystringify/2.2.0: @@ -809,7 +809,7 @@ packages: util-deprecate: 1.0.2 dev: false engines: - node: ">= 6" + node: '>= 6' resolution: integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== /readdirp/3.5.0: @@ -817,19 +817,19 @@ packages: picomatch: 2.2.2 dev: true engines: - node: ">=8.10.0" + node: '>=8.10.0' resolution: integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== /repeat-string/1.6.1: dev: true engines: - node: ">=0.10" + node: '>=0.10' resolution: integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc= /require-directory/2.1.1: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= /require-main-filename/2.0.0: @@ -849,7 +849,7 @@ packages: align-text: 0.1.4 dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-YTObci/mo1FWiSENJOFMlhSGE+8= /safe-buffer/5.1.2: @@ -874,20 +874,20 @@ packages: amdefine: 1.0.1 dev: true engines: - node: ">=0.8.0" + node: '>=0.8.0' optional: true resolution: integrity: sha1-2rc/vPwrqBm03gO9b26qSBZLP50= /source-map/0.5.7: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= /source-map/0.6.1: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== /sprintf-js/1.0.3: @@ -900,7 +900,7 @@ packages: strip-ansi: 4.0.0 dev: true engines: - node: ">=4" + node: '>=4' resolution: integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== /string-width/3.1.0: @@ -910,7 +910,7 @@ packages: strip-ansi: 5.2.0 dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== /string_decoder/1.3.0: @@ -924,7 +924,7 @@ packages: ansi-regex: 3.0.0 dev: true engines: - node: ">=4" + node: '>=4' resolution: integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= /strip-ansi/5.2.0: @@ -932,13 +932,13 @@ packages: ansi-regex: 4.1.0 dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== /strip-json-comments/3.1.1: dev: true engines: - node: ">=8" + node: '>=8' resolution: integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== /supports-color/3.1.2: @@ -946,7 +946,7 @@ packages: has-flag: 1.0.0 dev: true engines: - node: ">=0.8.0" + node: '>=0.8.0' resolution: integrity: sha1-cqJiiU2dQIuVbKBf83su2KbiotU= /supports-color/7.2.0: @@ -954,7 +954,7 @@ packages: has-flag: 4.0.0 dev: true engines: - node: ">=8" + node: '>=8' resolution: integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== /to-regex-range/5.0.1: @@ -962,7 +962,7 @@ packages: is-number: 7.0.0 dev: true engines: - node: ">=8.0" + node: '>=8.0' resolution: integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== /type-check/0.3.2: @@ -970,7 +970,7 @@ packages: prelude-ls: 1.1.2 dev: true engines: - node: ">= 0.8.0" + node: '>= 0.8.0' resolution: integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= /uglify-js/2.8.29: @@ -979,7 +979,7 @@ packages: yargs: 3.10.0 dev: true engines: - node: ">=0.8.0" + node: '>=0.8.0' hasBin: true optionalDependencies: uglify-to-browserify: 1.0.2 @@ -988,7 +988,7 @@ packages: /uglify-js/3.12.2: dev: true engines: - node: ">=0.8.0" + node: '>=0.8.0' hasBin: true optional: true resolution: @@ -1025,7 +1025,7 @@ packages: isexe: 2.0.0 dev: true engines: - node: ">= 8" + node: '>= 8' hasBin: true resolution: integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -1038,19 +1038,19 @@ packages: /window-size/0.1.0: dev: true engines: - node: ">= 0.8.0" + node: '>= 0.8.0' resolution: integrity: sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= /word-wrap/1.2.3: dev: true engines: - node: ">=0.10.0" + node: '>=0.10.0' resolution: integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== /wordwrap/0.0.2: dev: true engines: - node: ">=0.4.0" + node: '>=0.4.0' resolution: integrity: sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= /wordwrap/1.0.0: @@ -1068,7 +1068,7 @@ packages: strip-ansi: 5.2.0 dev: true engines: - node: ">=6" + node: '>=6' resolution: integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== /wrappy/1.0.2: @@ -1094,7 +1094,7 @@ packages: is-plain-obj: 2.1.0 dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== /yargs/13.3.2: @@ -1124,7 +1124,7 @@ packages: /yocto-queue/0.1.0: dev: true engines: - node: ">=10" + node: '>=10' resolution: integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== specifiers: @@ -1136,5 +1136,5 @@ specifiers: mocha: ^8.2.1 readable-stream: 3.x safe-buffer: ~5.2.1 - uglify-js: ^2.6.4 + uglify-js: <3.0.0 url-parse: ~1.4.7 From 38ed5f2c7bbafc84853669b8069cc0685e55ebf1 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Wed, 23 Dec 2020 06:31:27 +0000 Subject: [PATCH 13/30] Remove the unnecessary node engine restriction --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index afef6102..6d8aa1bb 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,6 @@ "type": "git", "url": "https://github.com/squaremo/amqp.node.git" }, - "engines": { - "node": ">=0.8 <=14" - }, "dependencies": { "bitsyntax": "~0.1.0", "bluebird": "^3.7.2", From b86270ab155a7874e96d5238568e2323230f0df8 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Wed, 13 Jan 2021 06:01:38 +0000 Subject: [PATCH 14/30] Ensure the consumer registration runs before messages may arrive --- lib/channel_model.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/channel_model.js b/lib/channel_model.js index 2fd06a3c..79403ffc 100644 --- a/lib/channel_model.js +++ b/lib/channel_model.js @@ -176,12 +176,10 @@ C.consume = function (queue, callback, options) { if (err) { reject(err); } else { - resolve(result); + self.registerConsumer(result.fields.consumerTag, callback); + resolve(result.fields); } }); - }).then(function (ok) { - self.registerConsumer(ok.fields.consumerTag, callback); - return ok.fields; }); }; From ca9d6d0a05f4b1f192c9c745f4cd32d235490a06 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Wed, 13 Jan 2021 06:59:28 +0000 Subject: [PATCH 15/30] Swap Promise.joint to Promise.all --- test/channel.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/channel.js b/test/channel.js index 4d7fb7f8..03911e85 100644 --- a/test/channel.js +++ b/test/channel.js @@ -332,7 +332,8 @@ suite("channel machinery", function () { return ch._rpc(defs.BasicRecover, { requeue: true }, defs.BasicRecoverOk, failureCb(resolve, reject)); }); - Promise.join(close, fail1, fail2).then(succeed(done)).catch(fail(done)); + // Promise.join(close, fail1, fail2).then(succeed(done)).catch(fail(done)); + Promise.all([close, fail1, fail2]).then(succeed(done)).catch(fail(done)); }, function (send, wait, done, ch) { wait(defs.BasicRecover)() From df1e86b02ab3fecfe14be0757beccfb6496b60bb Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Wed, 13 Jan 2021 06:59:52 +0000 Subject: [PATCH 16/30] Add mocha.json to run tests without make and other updates --- .gitignore | 1 + .mocharc.json | 5 + package.json | 1 + pnpm-lock.yaml | 782 ++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 788 insertions(+), 1 deletion(-) create mode 100644 .mocharc.json diff --git a/.gitignore b/.gitignore index 45c1bf32..a3076c1f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ node_modules/ bin/amqp-rabbitmq-0.9.1.json etc/ coverage/ +.nyc_output \ No newline at end of file diff --git a/.mocharc.json b/.mocharc.json new file mode 100644 index 00000000..d1cca7a9 --- /dev/null +++ b/.mocharc.json @@ -0,0 +1,5 @@ +{ + "extension": ["js"], + "ui": "tdd", + "spec": "test/**/*.js" +} diff --git a/package.json b/package.json index 6d8aa1bb..dbd75b68 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "claire": "0.4.1", "istanbul": "0.4.x", "mocha": "^8.2.1", + "nyc": "^15.1.0", "uglify-js": "<3.0.0" }, "scripts": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23dd4de5..6c252158 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,9 +9,188 @@ devDependencies: claire: 0.4.1 istanbul: 0.4.5 mocha: 8.2.1 + nyc: 15.1.0 uglify-js: 2.8.29 lockfileVersion: 5.2 packages: + /@babel/code-frame/7.12.11: + dependencies: + '@babel/highlight': 7.10.4 + dev: true + resolution: + integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + /@babel/core/7.12.10: + dependencies: + '@babel/code-frame': 7.12.11 + '@babel/generator': 7.12.11 + '@babel/helper-module-transforms': 7.12.1 + '@babel/helpers': 7.12.5 + '@babel/parser': 7.12.11 + '@babel/template': 7.12.7 + '@babel/traverse': 7.12.12 + '@babel/types': 7.12.12 + convert-source-map: 1.7.0 + debug: 4.3.1 + gensync: 1.0.0-beta.2 + json5: 2.1.3 + lodash: 4.17.20 + semver: 5.7.1 + source-map: 0.5.7 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== + /@babel/generator/7.12.11: + dependencies: + '@babel/types': 7.12.12 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + resolution: + integrity: sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== + /@babel/helper-function-name/7.12.11: + dependencies: + '@babel/helper-get-function-arity': 7.12.10 + '@babel/template': 7.12.7 + '@babel/types': 7.12.12 + dev: true + resolution: + integrity: sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== + /@babel/helper-get-function-arity/7.12.10: + dependencies: + '@babel/types': 7.12.12 + dev: true + resolution: + integrity: sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + /@babel/helper-member-expression-to-functions/7.12.7: + dependencies: + '@babel/types': 7.12.12 + dev: true + resolution: + integrity: sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + /@babel/helper-module-imports/7.12.5: + dependencies: + '@babel/types': 7.12.12 + dev: true + resolution: + integrity: sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + /@babel/helper-module-transforms/7.12.1: + dependencies: + '@babel/helper-module-imports': 7.12.5 + '@babel/helper-replace-supers': 7.12.11 + '@babel/helper-simple-access': 7.12.1 + '@babel/helper-split-export-declaration': 7.12.11 + '@babel/helper-validator-identifier': 7.12.11 + '@babel/template': 7.12.7 + '@babel/traverse': 7.12.12 + '@babel/types': 7.12.12 + lodash: 4.17.20 + dev: true + resolution: + integrity: sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + /@babel/helper-optimise-call-expression/7.12.10: + dependencies: + '@babel/types': 7.12.12 + dev: true + resolution: + integrity: sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== + /@babel/helper-replace-supers/7.12.11: + dependencies: + '@babel/helper-member-expression-to-functions': 7.12.7 + '@babel/helper-optimise-call-expression': 7.12.10 + '@babel/traverse': 7.12.12 + '@babel/types': 7.12.12 + dev: true + resolution: + integrity: sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== + /@babel/helper-simple-access/7.12.1: + dependencies: + '@babel/types': 7.12.12 + dev: true + resolution: + integrity: sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + /@babel/helper-split-export-declaration/7.12.11: + dependencies: + '@babel/types': 7.12.12 + dev: true + resolution: + integrity: sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== + /@babel/helper-validator-identifier/7.12.11: + dev: true + resolution: + integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + /@babel/helpers/7.12.5: + dependencies: + '@babel/template': 7.12.7 + '@babel/traverse': 7.12.12 + '@babel/types': 7.12.12 + dev: true + resolution: + integrity: sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + /@babel/highlight/7.10.4: + dependencies: + '@babel/helper-validator-identifier': 7.12.11 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + resolution: + integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + /@babel/parser/7.12.11: + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== + /@babel/template/7.12.7: + dependencies: + '@babel/code-frame': 7.12.11 + '@babel/parser': 7.12.11 + '@babel/types': 7.12.12 + dev: true + resolution: + integrity: sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + /@babel/traverse/7.12.12: + dependencies: + '@babel/code-frame': 7.12.11 + '@babel/generator': 7.12.11 + '@babel/helper-function-name': 7.12.11 + '@babel/helper-split-export-declaration': 7.12.11 + '@babel/parser': 7.12.11 + '@babel/types': 7.12.12 + debug: 4.3.1 + globals: 11.12.0 + lodash: 4.17.20 + dev: true + resolution: + integrity: sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== + /@babel/types/7.12.12: + dependencies: + '@babel/helper-validator-identifier': 7.12.11 + lodash: 4.17.20 + to-fast-properties: 2.0.0 + dev: true + resolution: + integrity: sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== + /@istanbuljs/load-nyc-config/1.1.0: + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + /@istanbuljs/schema/0.1.2: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== /@ungap/promise-all-settled/1.1.2: dev: true resolution: @@ -20,6 +199,15 @@ packages: dev: true resolution: integrity: sha1-kbR5JYinc4wl813W9jdSovh3YTU= + /aggregate-error/3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== /align-text/0.1.4: dependencies: kind-of: 3.2.2 @@ -55,6 +243,12 @@ packages: node: '>=6' resolution: integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + /ansi-regex/5.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== /ansi-styles/3.2.1: dependencies: color-convert: 1.9.3 @@ -80,6 +274,18 @@ packages: node: '>= 8' resolution: integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + /append-transform/2.0.0: + dependencies: + default-require-extensions: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + /archy/1.0.0: + dev: true + resolution: + integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= /argparse/1.0.10: dependencies: sprintf-js: 1.0.3 @@ -141,6 +347,17 @@ packages: dev: false resolution: integrity: sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== + /caching-transform/4.0.0: + dependencies: + hasha: 5.2.2 + make-dir: 3.1.0 + package-hash: 4.0.0 + write-file-atomic: 3.0.3 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== /camelcase/1.2.1: dev: true engines: @@ -168,6 +385,16 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + /chalk/2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== /chalk/4.1.0: dependencies: ansi-styles: 4.3.0 @@ -201,6 +428,12 @@ packages: dev: true resolution: integrity: sha1-ynDcEmHd2PJaGvq604BcOfziY7w= + /clean-stack/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== /cliui/2.1.0: dependencies: center-align: 0.1.3 @@ -217,6 +450,14 @@ packages: dev: true resolution: integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + /cliui/6.0.0: + dependencies: + string-width: 4.2.0 + strip-ansi: 6.0.0 + wrap-ansi: 6.2.0 + dev: true + resolution: + integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== /color-convert/1.9.3: dependencies: color-name: 1.1.3 @@ -239,10 +480,30 @@ packages: dev: true resolution: integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + /commondir/1.0.1: + dev: true + resolution: + integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= /concat-map/0.0.1: dev: true resolution: integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /convert-source-map/1.7.0: + dependencies: + safe-buffer: 5.1.2 + dev: true + resolution: + integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + /cross-spawn/7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== /debug/2.6.9: dependencies: ms: 2.0.0 @@ -264,6 +525,19 @@ packages: optional: true resolution: integrity: sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + /debug/4.3.1: + dependencies: + ms: 2.1.2 + dev: true + engines: + node: '>=6.0' + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + resolution: + integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== /decamelize/1.2.0: dev: true engines: @@ -280,6 +554,14 @@ packages: dev: true resolution: integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + /default-require-extensions/3.0.0: + dependencies: + strip-bom: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== /diff/4.0.2: dev: true engines: @@ -290,6 +572,20 @@ packages: dev: true resolution: integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + /emoji-regex/8.0.0: + dev: true + resolution: + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + /es6-error/4.1.1: + dev: true + resolution: + integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + /escape-string-regexp/1.0.5: + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= /escape-string-regexp/4.0.0: dev: true engines: @@ -348,6 +644,16 @@ packages: node: '>=8' resolution: integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + /find-cache-dir/3.3.1: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== /find-up/3.0.0: dependencies: locate-path: 3.0.0 @@ -356,6 +662,15 @@ packages: node: '>=6' resolution: integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + /find-up/4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== /find-up/5.0.0: dependencies: locate-path: 6.0.0 @@ -374,6 +689,19 @@ packages: dev: true resolution: integrity: sha1-wMPo+BYWdTh+2tofbOhNZ5sCUn8= + /foreground-child/2.0.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.3 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + /fromentries/1.3.2: + dev: true + resolution: + integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== /fs.realpath/1.0.0: dev: true resolution: @@ -388,12 +716,24 @@ packages: - darwin resolution: integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + /gensync/1.0.0-beta.2: + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== /get-caller-file/2.0.5: dev: true engines: node: 6.* || 8.* || >= 10.* resolution: integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + /get-package-type/0.1.0: + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== /glob-parent/5.1.1: dependencies: is-glob: 4.0.1 @@ -423,6 +763,16 @@ packages: dev: true resolution: integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + /globals/11.12.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + /graceful-fs/4.2.4: + dev: true + resolution: + integrity: sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== /growl/1.10.5: dev: true engines: @@ -449,17 +799,48 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + /has-flag/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= /has-flag/4.0.0: dev: true engines: node: '>=8' resolution: integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + /hasha/5.2.2: + dependencies: + is-stream: 2.0.0 + type-fest: 0.8.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== /he/1.2.0: dev: true hasBin: true resolution: integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + /html-escaper/2.0.2: + dev: true + resolution: + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + /imurmurhash/0.1.4: + dev: true + engines: + node: '>=0.8.19' + resolution: + integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= + /indent-string/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== /inflight/1.0.6: dependencies: once: 1.4.0 @@ -494,6 +875,12 @@ packages: node: '>=4' resolution: integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + /is-fullwidth-code-point/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== /is-glob/4.0.1: dependencies: is-extglob: 2.1.1 @@ -514,10 +901,94 @@ packages: node: '>=8' resolution: integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + /is-stream/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + /is-typedarray/1.0.0: + dev: true + resolution: + integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + /is-windows/1.0.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== /isexe/2.0.0: dev: true resolution: integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + /istanbul-lib-coverage/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + /istanbul-lib-hook/3.0.0: + dependencies: + append-transform: 2.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + /istanbul-lib-instrument/4.0.3: + dependencies: + '@babel/core': 7.12.10 + '@istanbuljs/schema': 0.1.2 + istanbul-lib-coverage: 3.0.0 + semver: 6.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + /istanbul-lib-processinfo/2.0.2: + dependencies: + archy: 1.0.0 + cross-spawn: 7.0.3 + istanbul-lib-coverage: 3.0.0 + make-dir: 3.1.0 + p-map: 3.0.0 + rimraf: 3.0.2 + uuid: 3.4.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== + /istanbul-lib-report/3.0.0: + dependencies: + istanbul-lib-coverage: 3.0.0 + make-dir: 3.1.0 + supports-color: 7.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + /istanbul-lib-source-maps/4.0.0: + dependencies: + debug: 4.3.1 + istanbul-lib-coverage: 3.0.0 + source-map: 0.6.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + /istanbul-reports/3.0.2: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== /istanbul/0.4.5: dependencies: abbrev: 1.0.9 @@ -542,6 +1013,10 @@ packages: hasBin: true resolution: integrity: sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= + /js-tokens/4.0.0: + dev: true + resolution: + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== /js-yaml/3.14.0: dependencies: argparse: 1.0.10 @@ -558,6 +1033,22 @@ packages: hasBin: true resolution: integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + /jsesc/2.5.2: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + /json5/2.1.3: + dependencies: + minimist: 1.2.5 + dev: true + engines: + node: '>=6' + hasBin: true + resolution: + integrity: sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== /kind-of/3.2.2: dependencies: is-buffer: 1.1.6 @@ -590,6 +1081,14 @@ packages: node: '>=6' resolution: integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + /locate-path/5.0.0: + dependencies: + p-locate: 4.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== /locate-path/6.0.0: dependencies: p-locate: 5.0.0 @@ -598,6 +1097,14 @@ packages: node: '>=10' resolution: integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + /lodash.flattendeep/4.4.0: + dev: true + resolution: + integrity: sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + /lodash/4.17.20: + dev: true + resolution: + integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== /log-symbols/4.0.0: dependencies: chalk: 4.1.0 @@ -612,6 +1119,14 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + /make-dir/3.1.0: + dependencies: + semver: 6.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== /minimatch/3.0.4: dependencies: brace-expansion: 1.1.11 @@ -686,6 +1201,14 @@ packages: dev: true resolution: integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + /node-preload/0.2.1: + dependencies: + process-on-spawn: 1.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== /nopt/3.0.6: dependencies: abbrev: 1.0.9 @@ -699,6 +1222,41 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + /nyc/15.1.0: + dependencies: + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.2 + caching-transform: 4.0.0 + convert-source-map: 1.7.0 + decamelize: 1.2.0 + find-cache-dir: 3.3.1 + find-up: 4.1.0 + foreground-child: 2.0.0 + get-package-type: 0.1.0 + glob: 7.1.6 + istanbul-lib-coverage: 3.0.0 + istanbul-lib-hook: 3.0.0 + istanbul-lib-instrument: 4.0.3 + istanbul-lib-processinfo: 2.0.2 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.0 + istanbul-reports: 3.0.2 + make-dir: 3.1.0 + node-preload: 0.2.1 + p-map: 3.0.0 + process-on-spawn: 1.0.0 + resolve-from: 5.0.0 + rimraf: 3.0.2 + signal-exit: 3.0.3 + spawn-wrap: 2.0.0 + test-exclude: 6.0.0 + yargs: 15.4.1 + dev: true + engines: + node: '>=8.9' + hasBin: true + resolution: + integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== /once/1.4.0: dependencies: wrappy: 1.0.2 @@ -742,6 +1300,14 @@ packages: node: '>=6' resolution: integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + /p-locate/4.1.0: + dependencies: + p-limit: 2.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== /p-locate/5.0.0: dependencies: p-limit: 3.1.0 @@ -750,12 +1316,31 @@ packages: node: '>=10' resolution: integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + /p-map/3.0.0: + dependencies: + aggregate-error: 3.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== /p-try/2.2.0: dev: true engines: node: '>=6' resolution: integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + /package-hash/4.0.0: + dependencies: + graceful-fs: 4.2.4 + hasha: 5.2.2 + lodash.flattendeep: 4.4.0 + release-zalgo: 1.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== /path-exists/3.0.0: dev: true engines: @@ -774,12 +1359,26 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /path-key/3.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== /picomatch/2.2.2: dev: true engines: node: '>=8.6' resolution: integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + /pkg-dir/4.2.0: + dependencies: + find-up: 4.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== /prelude-ls/0.6.0: dev: true engines: @@ -792,6 +1391,14 @@ packages: node: '>= 0.8.0' resolution: integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + /process-on-spawn/1.0.0: + dependencies: + fromentries: 1.3.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== /querystringify/2.2.0: dev: false resolution: @@ -820,6 +1427,14 @@ packages: node: '>=8.10.0' resolution: integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + /release-zalgo/1.0.0: + dependencies: + es6-error: 4.1.1 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= /repeat-string/1.6.1: dev: true engines: @@ -840,6 +1455,12 @@ packages: dev: false resolution: integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + /resolve-from/5.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== /resolve/1.1.7: dev: true resolution: @@ -852,13 +1473,29 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + /rimraf/3.0.2: + dependencies: + glob: 7.1.6 + dev: true + hasBin: true + resolution: + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== /safe-buffer/5.1.2: - dev: false resolution: integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== /safe-buffer/5.2.1: resolution: integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + /semver/5.7.1: + dev: true + hasBin: true + resolution: + integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + /semver/6.3.0: + dev: true + hasBin: true + resolution: + integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== /serialize-javascript/5.0.1: dependencies: randombytes: 2.1.0 @@ -869,6 +1506,24 @@ packages: dev: true resolution: integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + /shebang-command/2.0.0: + dependencies: + shebang-regex: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + /shebang-regex/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + /signal-exit/3.0.3: + dev: true + resolution: + integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== /source-map/0.2.0: dependencies: amdefine: 1.0.1 @@ -890,6 +1545,19 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + /spawn-wrap/2.0.0: + dependencies: + foreground-child: 2.0.0 + is-windows: 1.0.2 + make-dir: 3.1.0 + rimraf: 3.0.2 + signal-exit: 3.0.3 + which: 2.0.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== /sprintf-js/1.0.3: dev: true resolution: @@ -913,6 +1581,16 @@ packages: node: '>=6' resolution: integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + /string-width/4.2.0: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== /string_decoder/1.3.0: dependencies: safe-buffer: 5.2.1 @@ -935,6 +1613,20 @@ packages: node: '>=6' resolution: integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + /strip-ansi/6.0.0: + dependencies: + ansi-regex: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + /strip-bom/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== /strip-json-comments/3.1.1: dev: true engines: @@ -949,6 +1641,14 @@ packages: node: '>=0.8.0' resolution: integrity: sha1-cqJiiU2dQIuVbKBf83su2KbiotU= + /supports-color/5.5.0: + dependencies: + has-flag: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== /supports-color/7.2.0: dependencies: has-flag: 4.0.0 @@ -957,6 +1657,22 @@ packages: node: '>=8' resolution: integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + /test-exclude/6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.2 + glob: 7.1.6 + minimatch: 3.0.4 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + /to-fast-properties/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= /to-regex-range/5.0.1: dependencies: is-number: 7.0.0 @@ -973,6 +1689,18 @@ packages: node: '>= 0.8.0' resolution: integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + /type-fest/0.8.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + /typedarray-to-buffer/3.1.5: + dependencies: + is-typedarray: 1.0.0 + dev: true + resolution: + integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== /uglify-js/2.8.29: dependencies: source-map: 0.5.7 @@ -1009,6 +1737,11 @@ packages: dev: false resolution: integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + /uuid/3.4.0: + dev: true + hasBin: true + resolution: + integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== /which-module/2.0.0: dev: true resolution: @@ -1071,10 +1804,29 @@ packages: node: '>=6' resolution: integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + /wrap-ansi/6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.0 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== /wrappy/1.0.2: dev: true resolution: integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /write-file-atomic/3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.3 + typedarray-to-buffer: 3.1.5 + dev: true + resolution: + integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== /y18n/4.0.1: dev: true resolution: @@ -1086,6 +1838,15 @@ packages: dev: true resolution: integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + /yargs-parser/18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== /yargs-unparser/2.0.0: dependencies: camelcase: 6.2.0 @@ -1112,6 +1873,24 @@ packages: dev: true resolution: integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + /yargs/15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.0 + which-module: 2.0.0 + y18n: 4.0.1 + yargs-parser: 18.1.3 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== /yargs/3.10.0: dependencies: camelcase: 1.2.1 @@ -1134,6 +1913,7 @@ specifiers: claire: 0.4.1 istanbul: 0.4.x mocha: ^8.2.1 + nyc: ^15.1.0 readable-stream: 3.x safe-buffer: ~5.2.1 uglify-js: <3.0.0 From aabeb25a1b9071763dd97266dc4c9cf04954218b Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Wed, 13 Jan 2021 07:34:00 +0000 Subject: [PATCH 17/30] Correct this scoping --- lib/callback_model.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/callback_model.js b/lib/callback_model.js index a25ff375..4c7c50cc 100644 --- a/lib/callback_model.js +++ b/lib/callback_model.js @@ -262,13 +262,14 @@ ConfirmChannel.prototype.sendToQueue = function (queue, content, options, cb) { }; ConfirmChannel.prototype.waitForConfirms = function (k) { + var self = this; var awaiting = []; var unconfirmed = this.unconfirmed; unconfirmed.forEach(function (val, index) { if (val === null); else { // already confirmed - var confirmed = new this.Promise(function (resolve, reject) { + var confirmed = new self.Promise(function (resolve, reject) { unconfirmed[index] = function (err) { if (val) val(err); if (err === null) resolve(); From 764e0ad4d5a489e31fc51d994c00270db85deb16 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Wed, 13 Jan 2021 07:34:10 +0000 Subject: [PATCH 18/30] Remove port --- test/channel_api.js | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/test/channel_api.js b/test/channel_api.js index 2ce16f61..98f7e8d6 100644 --- a/test/channel_api.js +++ b/test/channel_api.js @@ -9,7 +9,7 @@ var schedule = util.schedule; var randomString = util.randomString; var Buffer = require("safe-buffer").Buffer; -var URL = process.env.URL || "amqp://localhost:5673"; +var URL = process.env.URL || "amqp://localhost"; function connect() { return api.connect(URL, {}); @@ -116,7 +116,7 @@ suite("assert, check, delete", function () { chtest("delete queue", function (ch) { var q = "test.delete-queue"; - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.checkQueue(q)) + return Promise.all([ch.assertQueue(q, QUEUE_OPTS), ch.checkQueue(q)]) .then(function () { return ch.deleteQueue(q); }) @@ -127,7 +127,7 @@ suite("assert, check, delete", function () { chtest("delete exchange", function (ch) { var ex = "test.delete-exchange"; - return Promise.join(ch.assertExchange(ex, "fanout", EX_OPTS), ch.checkExchange(ex)) + return Promise.all([ch.assertExchange(ex, "fanout", EX_OPTS), ch.checkExchange(ex)]) .then(function () { return ch.deleteExchange(ex); }) @@ -171,7 +171,7 @@ suite("sendMessage", function () { chtest("send to queue and get from queue", function (ch) { var q = "test.send-to-q"; var msg = randomString(); - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) + return Promise.all([ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)]) .then(function () { ch.sendToQueue(q, Buffer.from(msg)); return waitForMessages(q); @@ -188,7 +188,7 @@ suite("sendMessage", function () { chtest("send (and get) zero content to queue", function (ch) { var q = "test.send-to-q"; var msg = Buffer.alloc(0); - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) + return Promise.all([ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)]) .then(function () { ch.sendToQueue(q, msg); return waitForMessages(q); @@ -210,7 +210,7 @@ suite("binding, consuming", function () { var q = "test.route-message-q"; var msg = randomString(); - return Promise.join(ch.assertExchange(ex, "fanout", EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindQueue(q, ex, "", {})) + return Promise.all([ch.assertExchange(ex, "fanout", EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindQueue(q, ex, "", {})]) .then(function () { ch.publish(ex, "", Buffer.from(msg)); return waitForMessages(q); @@ -249,7 +249,7 @@ suite("binding, consuming", function () { var viabinding = randomString(); var direct = randomString(); - return Promise.join(ch.assertExchange(ex, "fanout", EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindQueue(q, ex, "", {})) + return Promise.all([ch.assertExchange(ex, "fanout", EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindQueue(q, ex, "", {})]) .then(function () { ch.publish(ex, "", Buffer.from("foobar")); return waitForMessages(q); @@ -288,7 +288,7 @@ suite("binding, consuming", function () { var q = "test.ex-ex-binding-q"; var rk = "test.routing.key", msg = randomString(); - return Promise.join(ch.assertExchange(ex1, "direct", EX_OPTS), ch.assertExchange(ex2, "fanout", { durable: false, internal: true }), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindExchange(ex2, ex1, rk, {}), ch.bindQueue(q, ex2, "", {})).then(function () { + return Promise.all([ch.assertExchange(ex1, "direct", EX_OPTS), ch.assertExchange(ex2, "fanout", { durable: false, internal: true }), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindExchange(ex2, ex1, rk, {}), ch.bindQueue(q, ex2, "", {})]).then(function () { return new Promise(function (resolve, reject) { function delivery(m) { if (m.content.toString() === msg) resolve(); @@ -309,7 +309,7 @@ suite("binding, consuming", function () { var viabinding = randomString(); var direct = randomString(); - return Promise.join(ch.assertExchange(source, "fanout", EX_OPTS), ch.assertExchange(dest, "fanout", EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindExchange(dest, source, "", {}), ch.bindQueue(q, dest, "", {})) + return Promise.all([ch.assertExchange(source, "fanout", EX_OPTS), ch.assertExchange(dest, "fanout", EX_OPTS), ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.bindExchange(dest, source, "", {}), ch.bindQueue(q, dest, "", {})]) .then(function () { ch.publish(source, "", Buffer.from("foobar")); return waitForMessages(q); @@ -345,7 +345,7 @@ suite("binding, consuming", function () { var q = "test.consumer-cancel"; var ctag; var recv1 = new Promise(function (resolve, reject) { - Promise.join( + Promise.all([ ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), // My callback is 'resolve the promise in `arrived`' @@ -353,18 +353,18 @@ suite("binding, consuming", function () { ctag = ok.consumerTag; ch.sendToQueue(q, Buffer.from("foo")); }), - ); + ]); }); // A message should arrive because of the consume return recv1.then(function () { - var recv2 = Promise.join( + var recv2 = Promise.all([ ch.cancel(ctag).then(function () { return ch.sendToQueue(q, Buffer.from("bar")); }), // but check a message did arrive in the queue waitForMessages(q), - ) + ]) .then(function () { return ch.get(q, { noAck: true }); }) @@ -383,14 +383,14 @@ suite("binding, consuming", function () { chtest("cancelled consumer", function (ch) { var q = "test.cancelled-consumer"; return new Promise(function (resolve, reject) { - return Promise.join( + return Promise.all([ ch.assertQueue(q), ch.purgeQueue(q), ch.consume(q, function (msg) { if (msg === null) resolve(); else reject(new Error("Message not expected")); }), - ).then(function () { + ]).then(function () { return ch.deleteQueue(q); }); }); @@ -402,7 +402,7 @@ suite("binding, consuming", function () { var msg1 = randomString(), msg2 = randomString(); - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) + return Promise.all([ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)]) .then(function () { ch.sendToQueue(q, Buffer.from(msg1)); ch.sendToQueue(q, Buffer.from(msg2)); @@ -430,7 +430,7 @@ suite("binding, consuming", function () { var q = "test.nack"; var msg1 = randomString(); - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) + return Promise.all([ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)]) .then(function () { ch.sendToQueue(q, Buffer.from(msg1)); return waitForMessages(q); @@ -458,7 +458,7 @@ suite("binding, consuming", function () { var q = "test.reject"; var msg1 = randomString(); - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)) + return Promise.all([ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)]) .then(function () { ch.sendToQueue(q, Buffer.from(msg1)); return waitForMessages(q); @@ -482,7 +482,7 @@ suite("binding, consuming", function () { chtest("prefetch", function (ch) { var q = "test.prefetch"; - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.prefetch(1)) + return Promise.all([ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q), ch.prefetch(1)]) .then(function () { ch.sendToQueue(q, Buffer.from("foobar")); ch.sendToQueue(q, Buffer.from("foobar")); @@ -517,7 +517,7 @@ var confirmtest = channel_test.bind(null, "createConfirmChannel"); suite("confirms", function () { confirmtest("message is confirmed", function (ch) { var q = "test.confirm-message"; - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)).then(function () { + return Promise.all([ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)]).then(function () { return ch.sendToQueue(q, Buffer.from("bleep")); }); }); @@ -529,7 +529,7 @@ suite("confirms", function () { // multi-ack. confirmtest("multiple confirms", function (ch) { var q = "test.multiple-confirms"; - return Promise.join(ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)).then(function () { + return Promise.all([ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)]).then(function () { var multipleRainbows = false; ch.on("ack", function (a) { if (a.multiple) multipleRainbows = true; From 4ed3d351dff530d35bc9766ad3163caca69d0b30 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Wed, 13 Jan 2021 07:34:25 +0000 Subject: [PATCH 19/30] Swap Promise.join to Promise.all --- test/channel.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/channel.js b/test/channel.js index 03911e85..875b7cbf 100644 --- a/test/channel.js +++ b/test/channel.js @@ -332,7 +332,6 @@ suite("channel machinery", function () { return ch._rpc(defs.BasicRecover, { requeue: true }, defs.BasicRecoverOk, failureCb(resolve, reject)); }); - // Promise.join(close, fail1, fail2).then(succeed(done)).catch(fail(done)); Promise.all([close, fail1, fail2]).then(succeed(done)).catch(fail(done)); }, function (send, wait, done, ch) { From d52cef93fb9ecfa6911dbc77ec2fb1596fa47ba9 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Wed, 13 Jan 2021 07:35:06 +0000 Subject: [PATCH 20/30] Update packages --- package.json | 8 ++++---- pnpm-lock.yaml | 39 +++++++++++++++++---------------------- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index dbd75b68..390b45d7 100644 --- a/package.json +++ b/package.json @@ -10,18 +10,18 @@ }, "dependencies": { "bitsyntax": "~0.1.0", - "bluebird": "^3.7.2", "buffer-more-ints": "~1.0.0", - "readable-stream": "3.x", + "readable-stream": "~3.6.0", "safe-buffer": "~5.2.1", "url-parse": "~1.4.7" }, "devDependencies": { + "bluebird": "^3.7.2", "claire": "0.4.1", - "istanbul": "0.4.x", + "istanbul": "0.4.5", "mocha": "^8.2.1", "nyc": "^15.1.0", - "uglify-js": "<3.0.0" + "uglify-js": "^2.8.29" }, "scripts": { "test": "make test", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c252158..e316a348 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -300,12 +300,12 @@ packages: dev: true resolution: integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - /binary-extensions/2.1.0: + /binary-extensions/2.2.0: dev: true engines: node: '>=8' resolution: - integrity: sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== /bitsyntax/0.1.0: dependencies: buffer-more-ints: 1.0.0 @@ -707,7 +707,7 @@ packages: resolution: integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= /fsevents/2.1.3: - deprecated: Please update to v 2.2.x + deprecated: '"Please update to latest v2.3 or v2.2"' dev: true engines: node: ^8.16.0 || ^10.6.0 || >=11.0.0 @@ -790,7 +790,7 @@ packages: node: '>=0.4.7' hasBin: true optionalDependencies: - uglify-js: 3.12.2 + uglify-js: 3.12.4 resolution: integrity: sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== /has-flag/1.0.0: @@ -853,7 +853,7 @@ packages: integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== /is-binary-path/2.1.0: dependencies: - binary-extensions: 2.1.0 + binary-extensions: 2.2.0 dev: true engines: node: '>=8' @@ -998,11 +998,11 @@ packages: glob: 5.0.15 handlebars: 4.7.6 js-yaml: 3.14.1 - mkdirp: 0.5.1 + mkdirp: 0.5.5 nopt: 3.0.6 once: 1.4.0 resolve: 1.1.7 - supports-color: 3.1.2 + supports-color: 3.2.3 which: 1.3.1 wordwrap: 1.0.0 deprecated: |- @@ -1133,22 +1133,17 @@ packages: dev: true resolution: integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - /minimist/0.0.8: - dev: true - resolution: - integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= /minimist/1.2.5: dev: true resolution: integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - /mkdirp/0.5.1: + /mkdirp/0.5.5: dependencies: - minimist: 0.0.8 - deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) + minimist: 1.2.5 dev: true hasBin: true resolution: - integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== /mocha/8.2.1: dependencies: '@ungap/promise-all-settled': 1.1.2 @@ -1633,14 +1628,14 @@ packages: node: '>=8' resolution: integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - /supports-color/3.1.2: + /supports-color/3.2.3: dependencies: has-flag: 1.0.0 dev: true engines: node: '>=0.8.0' resolution: - integrity: sha1-cqJiiU2dQIuVbKBf83su2KbiotU= + integrity: sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= /supports-color/5.5.0: dependencies: has-flag: 3.0.0 @@ -1713,14 +1708,14 @@ packages: uglify-to-browserify: 1.0.2 resolution: integrity: sha1-KcVzMUgFe7Th913zW3qcty5qWd0= - /uglify-js/3.12.2: + /uglify-js/3.12.4: dev: true engines: node: '>=0.8.0' hasBin: true optional: true resolution: - integrity: sha512-rWYleAvfJPjduYCt+ELvzybNah/zIkRteGXIBO8X0lteRZPGladF61hFi8tU7qKTsF7u6DUQCtT9k00VlFOgkg== + integrity: sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A== /uglify-to-browserify/1.0.2: dev: true optional: true @@ -1911,10 +1906,10 @@ specifiers: bluebird: ^3.7.2 buffer-more-ints: ~1.0.0 claire: 0.4.1 - istanbul: 0.4.x + istanbul: 0.4.5 mocha: ^8.2.1 nyc: ^15.1.0 - readable-stream: 3.x + readable-stream: ~3.6.0 safe-buffer: ~5.2.1 - uglify-js: <3.0.0 + uglify-js: ^2.8.29 url-parse: ~1.4.7 From cb636809e19067c5e8507bfdbc5cce0738fa6775 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 25 May 2021 09:36:53 +0100 Subject: [PATCH 21/30] Update lockfile --- pnpm-lock.yaml | 1614 ++++++++++++++++++++++-------------------------- 1 file changed, 740 insertions(+), 874 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e316a348..44d2bae1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,25 +1,44 @@ +lockfileVersion: 5.3 + +specifiers: + bitsyntax: ~0.1.0 + bluebird: ^3.7.2 + buffer-more-ints: ~1.0.0 + claire: 0.4.1 + istanbul: 0.4.5 + mocha: ^8.2.1 + nyc: ^15.1.0 + readable-stream: ~3.6.0 + safe-buffer: ~5.2.1 + uglify-js: ^2.8.29 + url-parse: ~1.4.7 + dependencies: bitsyntax: 0.1.0 - bluebird: 3.7.2 buffer-more-ints: 1.0.0 readable-stream: 3.6.0 safe-buffer: 5.2.1 url-parse: 1.4.7 + devDependencies: + bluebird: 3.7.2 claire: 0.4.1 istanbul: 0.4.5 mocha: 8.2.1 nyc: 15.1.0 uglify-js: 2.8.29 -lockfileVersion: 5.2 + packages: + /@babel/code-frame/7.12.11: + resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: '@babel/highlight': 7.10.4 dev: true - resolution: - integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + /@babel/core/7.12.10: + resolution: {integrity: sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==} + engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.12.11 '@babel/generator': 7.12.11 @@ -36,46 +55,46 @@ packages: lodash: 4.17.20 semver: 5.7.1 source-map: 0.5.7 + transitivePeerDependencies: + - supports-color dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== + /@babel/generator/7.12.11: + resolution: {integrity: sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==} dependencies: '@babel/types': 7.12.12 jsesc: 2.5.2 source-map: 0.5.7 dev: true - resolution: - integrity: sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== + /@babel/helper-function-name/7.12.11: + resolution: {integrity: sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==} dependencies: '@babel/helper-get-function-arity': 7.12.10 '@babel/template': 7.12.7 '@babel/types': 7.12.12 dev: true - resolution: - integrity: sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== + /@babel/helper-get-function-arity/7.12.10: + resolution: {integrity: sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==} dependencies: '@babel/types': 7.12.12 dev: true - resolution: - integrity: sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + /@babel/helper-member-expression-to-functions/7.12.7: + resolution: {integrity: sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==} dependencies: '@babel/types': 7.12.12 dev: true - resolution: - integrity: sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + /@babel/helper-module-imports/7.12.5: + resolution: {integrity: sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==} dependencies: '@babel/types': 7.12.12 dev: true - resolution: - integrity: sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + /@babel/helper-module-transforms/7.12.1: + resolution: {integrity: sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==} dependencies: '@babel/helper-module-imports': 7.12.5 '@babel/helper-replace-supers': 7.12.11 @@ -86,72 +105,77 @@ packages: '@babel/traverse': 7.12.12 '@babel/types': 7.12.12 lodash: 4.17.20 + transitivePeerDependencies: + - supports-color dev: true - resolution: - integrity: sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + /@babel/helper-optimise-call-expression/7.12.10: + resolution: {integrity: sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==} dependencies: '@babel/types': 7.12.12 dev: true - resolution: - integrity: sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== + /@babel/helper-replace-supers/7.12.11: + resolution: {integrity: sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==} dependencies: '@babel/helper-member-expression-to-functions': 7.12.7 '@babel/helper-optimise-call-expression': 7.12.10 '@babel/traverse': 7.12.12 '@babel/types': 7.12.12 + transitivePeerDependencies: + - supports-color dev: true - resolution: - integrity: sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== + /@babel/helper-simple-access/7.12.1: + resolution: {integrity: sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==} dependencies: '@babel/types': 7.12.12 dev: true - resolution: - integrity: sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + /@babel/helper-split-export-declaration/7.12.11: + resolution: {integrity: sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==} dependencies: '@babel/types': 7.12.12 dev: true - resolution: - integrity: sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== + /@babel/helper-validator-identifier/7.12.11: + resolution: {integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==} dev: true - resolution: - integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + /@babel/helpers/7.12.5: + resolution: {integrity: sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==} dependencies: '@babel/template': 7.12.7 '@babel/traverse': 7.12.12 '@babel/types': 7.12.12 + transitivePeerDependencies: + - supports-color dev: true - resolution: - integrity: sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + /@babel/highlight/7.10.4: + resolution: {integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==} dependencies: '@babel/helper-validator-identifier': 7.12.11 chalk: 2.4.2 js-tokens: 4.0.0 dev: true - resolution: - integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + /@babel/parser/7.12.11: - dev: true - engines: - node: '>=6.0.0' + resolution: {integrity: sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==} + engines: {node: '>=6.0.0'} hasBin: true - resolution: - integrity: sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== + dev: true + /@babel/template/7.12.7: + resolution: {integrity: sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==} dependencies: '@babel/code-frame': 7.12.11 '@babel/parser': 7.12.11 '@babel/types': 7.12.12 dev: true - resolution: - integrity: sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + /@babel/traverse/7.12.12: + resolution: {integrity: sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==} dependencies: '@babel/code-frame': 7.12.11 '@babel/generator': 7.12.11 @@ -162,18 +186,21 @@ packages: debug: 4.3.1 globals: 11.12.0 lodash: 4.17.20 + transitivePeerDependencies: + - supports-color dev: true - resolution: - integrity: sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== + /@babel/types/7.12.12: + resolution: {integrity: sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==} dependencies: '@babel/helper-validator-identifier': 7.12.11 lodash: 4.17.20 to-fast-properties: 2.0.0 dev: true - resolution: - integrity: sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== + /@istanbuljs/load-nyc-config/1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} dependencies: camelcase: 5.3.1 find-up: 4.1.0 @@ -181,230 +208,207 @@ packages: js-yaml: 3.14.1 resolve-from: 5.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + /@istanbuljs/schema/0.1.2: + resolution: {integrity: sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + /@ungap/promise-all-settled/1.1.2: + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true - resolution: - integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + /abbrev/1.0.9: + resolution: {integrity: sha1-kbR5JYinc4wl813W9jdSovh3YTU=} dev: true - resolution: - integrity: sha1-kbR5JYinc4wl813W9jdSovh3YTU= + /aggregate-error/3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + /align-text/0.1.4: + resolution: {integrity: sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=} + engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 longest: 1.0.1 repeat-string: 1.6.1 dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + /amdefine/1.0.1: + resolution: {integrity: sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=} + engines: {node: '>=0.4.2'} dev: true - engines: - node: '>=0.4.2' optional: true - resolution: - integrity: sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + /ansi-colors/4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + /ansi-regex/3.0.0: + resolution: {integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=} + engines: {node: '>=4'} dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + /ansi-regex/4.1.0: + resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==} + engines: {node: '>=6'} dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + /ansi-regex/5.0.0: + resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + /anymatch/3.1.1: + resolution: {integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.2.2 dev: true - engines: - node: '>= 8' - resolution: - integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + /append-transform/2.0.0: + resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} + engines: {node: '>=8'} dependencies: default-require-extensions: 3.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + /archy/1.0.0: + resolution: {integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=} dev: true - resolution: - integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + /argparse/1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true - resolution: - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + /async/1.5.2: + resolution: {integrity: sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=} dev: true - resolution: - integrity: sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + /balanced-match/1.0.0: + resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=} dev: true - resolution: - integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + /bitsyntax/0.1.0: + resolution: {integrity: sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==} + engines: {node: '>=0.8'} dependencies: buffer-more-ints: 1.0.0 debug: 2.6.9 safe-buffer: 5.1.2 dev: false - engines: - node: '>=0.8' - resolution: - integrity: sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== + /bluebird/3.7.2: - dev: false - resolution: - integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + /boo/1.2.4: + resolution: {integrity: sha1-szMxw2xK552C9P0ORJBgTLfFE7U=} dev: true - resolution: - integrity: sha1-szMxw2xK552C9P0ORJBgTLfFE7U= + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.0 concat-map: 0.0.1 dev: true - resolution: - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + /browser-stdout/1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - resolution: - integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + /buffer-more-ints/1.0.0: + resolution: {integrity: sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==} dev: false - resolution: - integrity: sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== + /caching-transform/4.0.0: + resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} + engines: {node: '>=8'} dependencies: hasha: 5.2.2 make-dir: 3.1.0 package-hash: 4.0.0 write-file-atomic: 3.0.3 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + /camelcase/1.2.1: + resolution: {integrity: sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + /camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + /camelcase/6.2.0: + resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} + engines: {node: '>=10'} dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + /center-align/0.1.3: + resolution: {integrity: sha1-qg0yYptu6XIgBBHL1EYckHvCt60=} + engines: {node: '>=0.10.0'} dependencies: align-text: 0.1.4 lazy-cache: 1.0.4 dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + /chalk/4.1.0: + resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + /chokidar/3.4.3: + resolution: {integrity: sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.1 braces: 3.0.2 @@ -413,336 +417,306 @@ packages: is-glob: 4.0.1 normalize-path: 3.0.0 readdirp: 3.5.0 - dev: true - engines: - node: '>= 8.10.0' optionalDependencies: fsevents: 2.1.3 - resolution: - integrity: sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dev: true + /claire/0.4.1: + resolution: {integrity: sha1-ynDcEmHd2PJaGvq604BcOfziY7w=} dependencies: boo: 1.2.4 flaw: 0.1.0 prelude-ls: 0.6.0 dev: true - resolution: - integrity: sha1-ynDcEmHd2PJaGvq604BcOfziY7w= + /clean-stack/2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + /cliui/2.1.0: + resolution: {integrity: sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=} dependencies: center-align: 0.1.3 right-align: 0.1.3 wordwrap: 0.0.2 dev: true - resolution: - integrity: sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + /cliui/5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} dependencies: string-width: 3.1.0 strip-ansi: 5.2.0 wrap-ansi: 5.1.0 dev: true - resolution: - integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + /cliui/6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: string-width: 4.2.0 strip-ansi: 6.0.0 wrap-ansi: 6.2.0 dev: true - resolution: - integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - resolution: - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: true - engines: - node: '>=7.0.0' - resolution: - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + /color-name/1.1.3: + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} dev: true - resolution: - integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - resolution: - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + /commondir/1.0.1: + resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} dev: true - resolution: - integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true - resolution: - integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /convert-source-map/1.7.0: + resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} dependencies: safe-buffer: 5.1.2 dev: true - resolution: - integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 dev: true - engines: - node: '>= 8' - resolution: - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} dependencies: ms: 2.0.0 dev: false - resolution: - integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /debug/4.2.0_supports-color@7.2.0: - dependencies: - ms: 2.1.2 - supports-color: 7.2.0 - deprecated: 'Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)' - dev: true - engines: - node: '>=6.0' + resolution: {integrity: sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==} + engines: {node: '>=6.0'} + deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - resolution: - integrity: sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== - /debug/4.3.1: dependencies: ms: 2.1.2 + supports-color: 7.2.0 dev: true - engines: - node: '>=6.0' + + /debug/4.3.1: + resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - resolution: - integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms: 2.1.2 + dev: true + /decamelize/1.2.0: + resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + /decamelize/4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + /deep-is/0.1.3: + resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=} dev: true - resolution: - integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + /default-require-extensions/3.0.0: + resolution: {integrity: sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==} + engines: {node: '>=8'} dependencies: strip-bom: 4.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} dev: true - engines: - node: '>=0.3.1' - resolution: - integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + /emoji-regex/7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} dev: true - resolution: - integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true - resolution: - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + /es6-error/4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true - resolution: - integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + /escape-string-regexp/1.0.5: + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} dev: true - engines: - node: '>=0.8.0' - resolution: - integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + /escodegen/1.8.1: + resolution: {integrity: sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=} + engines: {node: '>=0.12.0'} + hasBin: true dependencies: esprima: 2.7.3 estraverse: 1.9.3 esutils: 2.0.3 optionator: 0.8.3 - dev: true - engines: - node: '>=0.12.0' - hasBin: true optionalDependencies: source-map: 0.2.0 - resolution: - integrity: sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= - /esprima/2.7.3: dev: true - engines: - node: '>=0.10.0' + + /esprima/2.7.3: + resolution: {integrity: sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=} + engines: {node: '>=0.10.0'} hasBin: true - resolution: - integrity: sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - /esprima/4.0.1: dev: true - engines: - node: '>=4' + + /esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true - resolution: - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + dev: true + /estraverse/1.9.3: + resolution: {integrity: sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + /fast-levenshtein/2.0.6: + resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} dev: true - resolution: - integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + /find-cache-dir/3.3.1: + resolution: {integrity: sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==} + engines: {node: '>=8'} dependencies: commondir: 1.0.1 make-dir: 3.1.0 pkg-dir: 4.2.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + /find-up/3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + /flat/5.0.2: - dev: true + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - resolution: - integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + dev: true + /flaw/0.1.0: + resolution: {integrity: sha1-wMPo+BYWdTh+2tofbOhNZ5sCUn8=} dev: true - resolution: - integrity: sha1-wMPo+BYWdTh+2tofbOhNZ5sCUn8= + /foreground-child/2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} dependencies: cross-spawn: 7.0.3 signal-exit: 3.0.3 dev: true - engines: - node: '>=8.0.0' - resolution: - integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + /fromentries/1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} dev: true - resolution: - integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + /fs.realpath/1.0.0: + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} dev: true - resolution: - integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /fsevents/2.1.3: + resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] deprecated: '"Please update to latest v2.3 or v2.2"' dev: true - engines: - node: ^8.16.0 || ^10.6.0 || >=11.0.0 optional: true - os: - - darwin - resolution: - integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} dev: true - engines: - node: 6.* || 8.* || >= 10.* - resolution: - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + /get-package-type/0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} dev: true - engines: - node: '>=8.0.0' - resolution: - integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + /glob-parent/5.1.1: + resolution: {integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.1 dev: true - engines: - node: '>= 6' - resolution: - integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + /glob/5.0.15: + resolution: {integrity: sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=} dependencies: inflight: 1.0.6 inherits: 2.0.4 @@ -750,9 +724,9 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 dev: true - resolution: - integrity: sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + /glob/7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -761,192 +735,174 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 dev: true - resolution: - integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + /graceful-fs/4.2.4: + resolution: {integrity: sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==} dev: true - resolution: - integrity: sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + /growl/1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} dev: true - engines: - node: '>=4.x' - resolution: - integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + /handlebars/4.7.6: + resolution: {integrity: sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==} + engines: {node: '>=0.4.7'} + hasBin: true dependencies: minimist: 1.2.5 neo-async: 2.6.2 source-map: 0.6.1 wordwrap: 1.0.0 - dev: true - engines: - node: '>=0.4.7' - hasBin: true optionalDependencies: uglify-js: 3.12.4 - resolution: - integrity: sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== + dev: true + /has-flag/1.0.0: + resolution: {integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + /has-flag/3.0.0: + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + /hasha/5.2.2: + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} dependencies: is-stream: 2.0.0 type-fest: 0.8.1 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + /he/1.2.0: - dev: true + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - resolution: - integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + dev: true + /html-escaper/2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - resolution: - integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + /imurmurhash/0.1.4: + resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} + engines: {node: '>=0.8.19'} dev: true - engines: - node: '>=0.8.19' - resolution: - integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + /inflight/1.0.6: + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - resolution: - integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.4: - resolution: - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + /is-buffer/1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - resolution: - integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + /is-extglob/2.1.1: + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + /is-fullwidth-code-point/2.0.0: + resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} + engines: {node: '>=4'} dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + /is-glob/4.0.1: + resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} dev: true - engines: - node: '>=0.12.0' - resolution: - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + /is-plain-obj/2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + /is-stream/2.0.0: + resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + /is-typedarray/1.0.0: + resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} dev: true - resolution: - integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + /is-windows/1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + /isexe/2.0.0: + resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} dev: true - resolution: - integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + /istanbul-lib-coverage/3.0.0: + resolution: {integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + /istanbul-lib-hook/3.0.0: + resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} + engines: {node: '>=8'} dependencies: append-transform: 2.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + /istanbul-lib-instrument/4.0.3: + resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} + engines: {node: '>=8'} dependencies: '@babel/core': 7.12.10 '@istanbuljs/schema': 0.1.2 istanbul-lib-coverage: 3.0.0 semver: 6.3.0 + transitivePeerDependencies: + - supports-color dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + /istanbul-lib-processinfo/2.0.2: + resolution: {integrity: sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==} + engines: {node: '>=8'} dependencies: archy: 1.0.0 cross-spawn: 7.0.3 @@ -956,40 +912,42 @@ packages: rimraf: 3.0.2 uuid: 3.4.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== + /istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} dependencies: istanbul-lib-coverage: 3.0.0 make-dir: 3.1.0 supports-color: 7.2.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + /istanbul-lib-source-maps/4.0.0: + resolution: {integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==} + engines: {node: '>=8'} dependencies: debug: 4.3.1 istanbul-lib-coverage: 3.0.0 source-map: 0.6.1 + transitivePeerDependencies: + - supports-color dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + /istanbul-reports/3.0.2: + resolution: {integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==} + engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + /istanbul/0.4.5: + resolution: {integrity: sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=} + deprecated: |- + This module is no longer maintained, try this instead: + npm i nyc + Visit https://istanbul.js.org/integrations for other alternatives. + hasBin: true dependencies: abbrev: 1.0.9 async: 1.5.2 @@ -1005,146 +963,132 @@ packages: supports-color: 3.2.3 which: 1.3.1 wordwrap: 1.0.0 - deprecated: |- - This module is no longer maintained, try this instead: - npm i nyc - Visit https://istanbul.js.org/integrations for other alternatives. dev: true - hasBin: true - resolution: - integrity: sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - resolution: - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + /js-yaml/3.14.0: + resolution: {integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 dev: true - hasBin: true - resolution: - integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + /js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 dev: true - hasBin: true - resolution: - integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + /jsesc/2.5.2: - dev: true - engines: - node: '>=4' + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} hasBin: true - resolution: - integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + dev: true + /json5/2.1.3: + resolution: {integrity: sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==} + engines: {node: '>=6'} + hasBin: true dependencies: minimist: 1.2.5 dev: true - engines: - node: '>=6' - hasBin: true - resolution: - integrity: sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + /kind-of/3.2.2: + resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=} + engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + /lazy-cache/1.0.4: + resolution: {integrity: sha1-odePw6UEdMuAhF07O24dpJpEbo4=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-odePw6UEdMuAhF07O24dpJpEbo4= + /levn/0.3.0: + resolution: {integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + /locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} dependencies: p-locate: 3.0.0 path-exists: 3.0.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + /lodash.flattendeep/4.4.0: + resolution: {integrity: sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=} dev: true - resolution: - integrity: sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + /lodash/4.17.20: + resolution: {integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==} dev: true - resolution: - integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + /log-symbols/4.0.0: + resolution: {integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==} + engines: {node: '>=10'} dependencies: chalk: 4.1.0 dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + /longest/1.0.1: + resolution: {integrity: sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + /minimatch/3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} dependencies: brace-expansion: 1.1.11 dev: true - resolution: - integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /minimist/1.2.5: + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} dev: true - resolution: - integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + /mkdirp/0.5.5: + resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} + hasBin: true dependencies: minimist: 1.2.5 dev: true - hasBin: true - resolution: - integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + /mocha/8.2.1: + resolution: {integrity: sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==} + engines: {node: '>= 10.12.0'} + hasBin: true dependencies: '@ungap/promise-all-settled': 1.1.2 ansi-colors: 4.1.1 @@ -1172,52 +1116,48 @@ packages: yargs-parser: 13.1.2 yargs-unparser: 2.0.0 dev: true - engines: - node: '>= 10.12.0' - hasBin: true - resolution: - integrity: sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== + /ms/2.0.0: + resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} dev: false - resolution: - integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - resolution: - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + /nanoid/3.1.12: - dev: true - engines: - node: ^10 || ^12 || >=13.7 + resolution: {integrity: sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==} + engines: {node: ^10 || ^12 || >=13.7} hasBin: true - resolution: - integrity: sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== + dev: true + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - resolution: - integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + /node-preload/0.2.1: + resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} + engines: {node: '>=8'} dependencies: process-on-spawn: 1.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + /nopt/3.0.6: + resolution: {integrity: sha1-xkZdvwirzU2zWTF/eaxopkayj/k=} + hasBin: true dependencies: abbrev: 1.0.9 dev: true - hasBin: true - resolution: - integrity: sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + /nyc/15.1.0: + resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} + engines: {node: '>=8.9'} + hasBin: true dependencies: '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.2 @@ -1246,19 +1186,19 @@ packages: spawn-wrap: 2.0.0 test-exclude: 6.0.0 yargs: 15.4.1 + transitivePeerDependencies: + - supports-color dev: true - engines: - node: '>=8.9' - hasBin: true - resolution: - integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== + /once/1.4.0: + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 dev: true - resolution: - integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /optionator/0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.3 fast-levenshtein: 2.0.6 @@ -1267,280 +1207,250 @@ packages: type-check: 0.3.2 word-wrap: 1.2.3 dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + /p-locate/3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + /p-map/3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} dependencies: aggregate-error: 3.1.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + /package-hash/4.0.0: + resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} + engines: {node: '>=8'} dependencies: graceful-fs: 4.2.4 hasha: 5.2.2 lodash.flattendeep: 4.4.0 release-zalgo: 1.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + /path-exists/3.0.0: + resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} + engines: {node: '>=4'} dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + /path-is-absolute/1.0.1: + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + /picomatch/2.2.2: + resolution: {integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==} + engines: {node: '>=8.6'} dev: true - engines: - node: '>=8.6' - resolution: - integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + /pkg-dir/4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + /prelude-ls/0.6.0: + resolution: {integrity: sha1-z4JLS0fMc8vZb56YhQc7Q6rqqzs=} + engines: {node: '>= 0.8.0'} dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha1-z4JLS0fMc8vZb56YhQc7Q6rqqzs= + /prelude-ls/1.1.2: + resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=} + engines: {node: '>= 0.8.0'} dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + /process-on-spawn/1.0.0: + resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} + engines: {node: '>=8'} dependencies: fromentries: 1.3.2 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + /querystringify/2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: false - resolution: - integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - resolution: - integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 dev: false - engines: - node: '>= 6' - resolution: - integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + /readdirp/3.5.0: + resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.2.2 dev: true - engines: - node: '>=8.10.0' - resolution: - integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + /release-zalgo/1.0.0: + resolution: {integrity: sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=} + engines: {node: '>=4'} dependencies: es6-error: 4.1.1 dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + /repeat-string/1.6.1: + resolution: {integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=} + engines: {node: '>=0.10'} dev: true - engines: - node: '>=0.10' - resolution: - integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc= + /require-directory/2.1.1: + resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + /require-main-filename/2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - resolution: - integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + /requires-port/1.0.0: + resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=} dev: false - resolution: - integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + /resolve-from/5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + /resolve/1.1.7: + resolution: {integrity: sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=} dev: true - resolution: - integrity: sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + /right-align/0.1.3: + resolution: {integrity: sha1-YTObci/mo1FWiSENJOFMlhSGE+8=} + engines: {node: '>=0.10.0'} dependencies: align-text: 0.1.4 dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true dependencies: glob: 7.1.6 dev: true - hasBin: true - resolution: - integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + /safe-buffer/5.1.2: - resolution: - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + /safe-buffer/5.2.1: - resolution: - integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /semver/5.7.1: - dev: true + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true - resolution: - integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - /semver/6.3.0: dev: true + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true - resolution: - integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + dev: true + /serialize-javascript/5.0.1: + resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} dependencies: randombytes: 2.1.0 dev: true - resolution: - integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + /set-blocking/2.0.0: + resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=} dev: true - resolution: - integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + /signal-exit/3.0.3: + resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} dev: true - resolution: - integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + /source-map/0.2.0: + resolution: {integrity: sha1-2rc/vPwrqBm03gO9b26qSBZLP50=} + engines: {node: '>=0.8.0'} dependencies: amdefine: 1.0.1 dev: true - engines: - node: '>=0.8.0' optional: true - resolution: - integrity: sha1-2rc/vPwrqBm03gO9b26qSBZLP50= + /source-map/0.5.7: + resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + /spawn-wrap/2.0.0: + resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} + engines: {node: '>=8'} dependencies: foreground-child: 2.0.0 is-windows: 1.0.2 @@ -1549,311 +1459,283 @@ packages: signal-exit: 3.0.3 which: 2.0.2 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + /sprintf-js/1.0.3: + resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} dev: true - resolution: - integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + /string-width/2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} dependencies: is-fullwidth-code-point: 2.0.0 strip-ansi: 4.0.0 dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + /string-width/3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} dependencies: emoji-regex: 7.0.3 is-fullwidth-code-point: 2.0.0 strip-ansi: 5.2.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + /string-width/4.2.0: + resolution: {integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: false - resolution: - integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + /strip-ansi/4.0.0: + resolution: {integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=} + engines: {node: '>=4'} dependencies: ansi-regex: 3.0.0 dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= + /strip-ansi/5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} dependencies: ansi-regex: 4.1.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + /strip-ansi/6.0.0: + resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + /strip-bom/4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + /supports-color/3.2.3: + resolution: {integrity: sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=} + engines: {node: '>=0.8.0'} dependencies: has-flag: 1.0.0 dev: true - engines: - node: '>=0.8.0' - resolution: - integrity: sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + /test-exclude/6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.2 glob: 7.1.6 minimatch: 3.0.4 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + /to-fast-properties/2.0.0: + resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} + engines: {node: '>=4'} dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true - engines: - node: '>=8.0' - resolution: - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + /type-check/0.3.2: + resolution: {integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + /type-fest/0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + /typedarray-to-buffer/3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 dev: true - resolution: - integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + /uglify-js/2.8.29: + resolution: {integrity: sha1-KcVzMUgFe7Th913zW3qcty5qWd0=} + engines: {node: '>=0.8.0'} + hasBin: true dependencies: source-map: 0.5.7 yargs: 3.10.0 - dev: true - engines: - node: '>=0.8.0' - hasBin: true optionalDependencies: uglify-to-browserify: 1.0.2 - resolution: - integrity: sha1-KcVzMUgFe7Th913zW3qcty5qWd0= - /uglify-js/3.12.4: dev: true - engines: - node: '>=0.8.0' + + /uglify-js/3.12.4: + resolution: {integrity: sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A==} + engines: {node: '>=0.8.0'} hasBin: true + dev: true optional: true - resolution: - integrity: sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A== + /uglify-to-browserify/1.0.2: + resolution: {integrity: sha1-bgkk1r2mta/jSeOabWMoUKD4grc=} dev: true optional: true - resolution: - integrity: sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + /url-parse/1.4.7: + resolution: {integrity: sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 dev: false - resolution: - integrity: sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + /util-deprecate/1.0.2: + resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} dev: false - resolution: - integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + /uuid/3.4.0: - dev: true + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} hasBin: true - resolution: - integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + dev: true + /which-module/2.0.0: + resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=} dev: true - resolution: - integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + /which/1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true dependencies: isexe: 2.0.0 dev: true - hasBin: true - resolution: - integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 dev: true - engines: - node: '>= 8' - hasBin: true - resolution: - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + /wide-align/1.1.3: + resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} dependencies: string-width: 2.1.1 dev: true - resolution: - integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + /window-size/0.1.0: + resolution: {integrity: sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=} + engines: {node: '>= 0.8.0'} dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + /wordwrap/0.0.2: + resolution: {integrity: sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=} + engines: {node: '>=0.4.0'} dev: true - engines: - node: '>=0.4.0' - resolution: - integrity: sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + /wordwrap/1.0.0: + resolution: {integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=} dev: true - resolution: - integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + /workerpool/6.0.2: + resolution: {integrity: sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==} dev: true - resolution: - integrity: sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== + /wrap-ansi/5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} dependencies: ansi-styles: 3.2.1 string-width: 3.1.0 strip-ansi: 5.2.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + /wrap-ansi/6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.0 strip-ansi: 6.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + /wrappy/1.0.2: + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} dev: true - resolution: - integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /write-file-atomic/3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 signal-exit: 3.0.3 typedarray-to-buffer: 3.1.5 dev: true - resolution: - integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + /y18n/4.0.1: + resolution: {integrity: sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==} dev: true - resolution: - integrity: sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + /yargs-parser/13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true - resolution: - integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + /yargs-parser/18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + /yargs-unparser/2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} dependencies: camelcase: 6.2.0 decamelize: 4.0.0 flat: 5.0.2 is-plain-obj: 2.1.0 dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + /yargs/13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} dependencies: cliui: 5.0.0 find-up: 3.0.0 @@ -1866,9 +1748,10 @@ packages: y18n: 4.0.1 yargs-parser: 13.1.2 dev: true - resolution: - integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + /yargs/15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -1882,34 +1765,17 @@ packages: y18n: 4.0.1 yargs-parser: 18.1.3 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + /yargs/3.10.0: + resolution: {integrity: sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=} dependencies: camelcase: 1.2.1 cliui: 2.1.0 decamelize: 1.2.0 window-size: 0.1.0 dev: true - resolution: - integrity: sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} dev: true - engines: - node: '>=10' - resolution: - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -specifiers: - bitsyntax: ~0.1.0 - bluebird: ^3.7.2 - buffer-more-ints: ~1.0.0 - claire: 0.4.1 - istanbul: 0.4.5 - mocha: ^8.2.1 - nyc: ^15.1.0 - readable-stream: ~3.6.0 - safe-buffer: ~5.2.1 - uglify-js: ^2.8.29 - url-parse: ~1.4.7 From c89c73fa9adfc53b174e786d6d44c235998c6620 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 18 Jan 2022 12:13:39 +0000 Subject: [PATCH 22/30] Scope the package --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 390b45d7..7dea18b9 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "amqplib", + "name": "@worthaboutapig/amqplib", "homepage": "http://squaremo.github.io/amqp.node/", "main": "./channel_api.js", "version": "0.6.0", From 6aaa99fea05bacffc2dfaff551c0e01df878c98a Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 18 Jan 2022 12:20:33 +0000 Subject: [PATCH 23/30] Minor tweaks pre-publish --- .eslintrc.js | 20 +- .npmignore | 1 + package.json | 2 +- pnpm-lock.yaml | 667 +++++++++++++++++++++++++------------------------ 4 files changed, 354 insertions(+), 336 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 5d721c17..eda8d6ad 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,23 +1,15 @@ module.exports = { env: { es6: true, - node: true + node: true, }, - extends: ['eslint:recommended', 'plugin:import/errors', 'plugin:import/warnings', 'prettier'], + extends: ["eslint:recommended", "plugin:import/errors", "plugin:import/warnings", "prettier"], parserOptions: { ecmaVersion: 2017, - sourceType: 'module' + sourceType: "module", }, rules: { - //'no-unused-vars': ['error', { args: 'none' }], - //'no-console': 'off', - //'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', - //'no-duplicate-imports': 'error', - //'require-atomic-updates': 'off', - //indent: ['error', 2], - //'linebreak-style': ['error', 'unix'], - quotes: ['error', 'double', { avoidEscape: true }], - semi: ['error', 'always'] - //'brace-style': ['error', '1tbs', { allowSingleLine: true }] - } + quotes: ["error", "double", { avoidEscape: true }], + semi: ["error", "always"], + }, }; diff --git a/.npmignore b/.npmignore index 4ec93971..058a55ec 100644 --- a/.npmignore +++ b/.npmignore @@ -6,3 +6,4 @@ scratch bin/amqp-rabbitmq-0.9.1.json etc/ coverage/ +.nyc_output/ \ No newline at end of file diff --git a/package.json b/package.json index 7dea18b9..7e2c0673 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "bluebird": "^3.7.2", "claire": "0.4.1", "istanbul": "0.4.5", - "mocha": "^8.2.1", + "mocha": "^8.4.0", "nyc": "^15.1.0", "uglify-js": "^2.8.29" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 44d2bae1..81fb8bb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,7 @@ specifiers: buffer-more-ints: ~1.0.0 claire: 0.4.1 istanbul: 0.4.5 - mocha: ^8.2.1 + mocha: ^8.4.0 nyc: ^15.1.0 readable-stream: ~3.6.0 safe-buffer: ~5.2.1 @@ -24,177 +24,204 @@ devDependencies: bluebird: 3.7.2 claire: 0.4.1 istanbul: 0.4.5 - mocha: 8.2.1 + mocha: 8.4.0 nyc: 15.1.0 uglify-js: 2.8.29 packages: - /@babel/code-frame/7.12.11: - resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} + /@babel/code-frame/7.16.7: + resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.10.4 + '@babel/highlight': 7.16.7 dev: true - /@babel/core/7.12.10: - resolution: {integrity: sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==} + /@babel/compat-data/7.16.8: + resolution: {integrity: sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.16.7: + resolution: {integrity: sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.12.11 - '@babel/generator': 7.12.11 - '@babel/helper-module-transforms': 7.12.1 - '@babel/helpers': 7.12.5 - '@babel/parser': 7.12.11 - '@babel/template': 7.12.7 - '@babel/traverse': 7.12.12 - '@babel/types': 7.12.12 - convert-source-map: 1.7.0 - debug: 4.3.1 + '@babel/code-frame': 7.16.7 + '@babel/generator': 7.16.8 + '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.16.7 + '@babel/helper-module-transforms': 7.16.7 + '@babel/helpers': 7.16.7 + '@babel/parser': 7.16.8 + '@babel/template': 7.16.7 + '@babel/traverse': 7.16.8 + '@babel/types': 7.16.8 + convert-source-map: 1.8.0 + debug: 4.3.3 gensync: 1.0.0-beta.2 - json5: 2.1.3 - lodash: 4.17.20 - semver: 5.7.1 + json5: 2.2.0 + semver: 6.3.0 source-map: 0.5.7 transitivePeerDependencies: - supports-color dev: true - /@babel/generator/7.12.11: - resolution: {integrity: sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==} + /@babel/generator/7.16.8: + resolution: {integrity: sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.12.12 + '@babel/types': 7.16.8 jsesc: 2.5.2 source-map: 0.5.7 dev: true - /@babel/helper-function-name/7.12.11: - resolution: {integrity: sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==} + /@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7: + resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-get-function-arity': 7.12.10 - '@babel/template': 7.12.7 - '@babel/types': 7.12.12 + '@babel/compat-data': 7.16.8 + '@babel/core': 7.16.7 + '@babel/helper-validator-option': 7.16.7 + browserslist: 4.19.1 + semver: 6.3.0 dev: true - /@babel/helper-get-function-arity/7.12.10: - resolution: {integrity: sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==} + /@babel/helper-environment-visitor/7.16.7: + resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.12.12 + '@babel/types': 7.16.8 dev: true - /@babel/helper-member-expression-to-functions/7.12.7: - resolution: {integrity: sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==} + /@babel/helper-function-name/7.16.7: + resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.12.12 + '@babel/helper-get-function-arity': 7.16.7 + '@babel/template': 7.16.7 + '@babel/types': 7.16.8 dev: true - /@babel/helper-module-imports/7.12.5: - resolution: {integrity: sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==} + /@babel/helper-get-function-arity/7.16.7: + resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.12.12 + '@babel/types': 7.16.8 dev: true - /@babel/helper-module-transforms/7.12.1: - resolution: {integrity: sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==} + /@babel/helper-hoist-variables/7.16.7: + resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-module-imports': 7.12.5 - '@babel/helper-replace-supers': 7.12.11 - '@babel/helper-simple-access': 7.12.1 - '@babel/helper-split-export-declaration': 7.12.11 - '@babel/helper-validator-identifier': 7.12.11 - '@babel/template': 7.12.7 - '@babel/traverse': 7.12.12 - '@babel/types': 7.12.12 - lodash: 4.17.20 - transitivePeerDependencies: - - supports-color + '@babel/types': 7.16.8 dev: true - /@babel/helper-optimise-call-expression/7.12.10: - resolution: {integrity: sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==} + /@babel/helper-module-imports/7.16.7: + resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.12.12 + '@babel/types': 7.16.8 dev: true - /@babel/helper-replace-supers/7.12.11: - resolution: {integrity: sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==} + /@babel/helper-module-transforms/7.16.7: + resolution: {integrity: sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-member-expression-to-functions': 7.12.7 - '@babel/helper-optimise-call-expression': 7.12.10 - '@babel/traverse': 7.12.12 - '@babel/types': 7.12.12 + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-simple-access': 7.16.7 + '@babel/helper-split-export-declaration': 7.16.7 + '@babel/helper-validator-identifier': 7.16.7 + '@babel/template': 7.16.7 + '@babel/traverse': 7.16.8 + '@babel/types': 7.16.8 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-simple-access/7.12.1: - resolution: {integrity: sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==} + /@babel/helper-simple-access/7.16.7: + resolution: {integrity: sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.12.12 + '@babel/types': 7.16.8 dev: true - /@babel/helper-split-export-declaration/7.12.11: - resolution: {integrity: sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==} + /@babel/helper-split-export-declaration/7.16.7: + resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.12.12 + '@babel/types': 7.16.8 dev: true - /@babel/helper-validator-identifier/7.12.11: - resolution: {integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==} + /@babel/helper-validator-identifier/7.16.7: + resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} + engines: {node: '>=6.9.0'} dev: true - /@babel/helpers/7.12.5: - resolution: {integrity: sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==} + /@babel/helper-validator-option/7.16.7: + resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers/7.16.7: + resolution: {integrity: sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.12.7 - '@babel/traverse': 7.12.12 - '@babel/types': 7.12.12 + '@babel/template': 7.16.7 + '@babel/traverse': 7.16.8 + '@babel/types': 7.16.8 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight/7.10.4: - resolution: {integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==} + /@babel/highlight/7.16.7: + resolution: {integrity: sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.12.11 + '@babel/helper-validator-identifier': 7.16.7 chalk: 2.4.2 js-tokens: 4.0.0 dev: true - /@babel/parser/7.12.11: - resolution: {integrity: sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==} + /@babel/parser/7.16.8: + resolution: {integrity: sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==} engines: {node: '>=6.0.0'} hasBin: true dev: true - /@babel/template/7.12.7: - resolution: {integrity: sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==} + /@babel/template/7.16.7: + resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.12.11 - '@babel/parser': 7.12.11 - '@babel/types': 7.12.12 + '@babel/code-frame': 7.16.7 + '@babel/parser': 7.16.8 + '@babel/types': 7.16.8 dev: true - /@babel/traverse/7.12.12: - resolution: {integrity: sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==} + /@babel/traverse/7.16.8: + resolution: {integrity: sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.12.11 - '@babel/generator': 7.12.11 - '@babel/helper-function-name': 7.12.11 - '@babel/helper-split-export-declaration': 7.12.11 - '@babel/parser': 7.12.11 - '@babel/types': 7.12.12 - debug: 4.3.1 + '@babel/code-frame': 7.16.7 + '@babel/generator': 7.16.8 + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-function-name': 7.16.7 + '@babel/helper-hoist-variables': 7.16.7 + '@babel/helper-split-export-declaration': 7.16.7 + '@babel/parser': 7.16.8 + '@babel/types': 7.16.8 + debug: 4.3.3 globals: 11.12.0 - lodash: 4.17.20 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.12.12: - resolution: {integrity: sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==} + /@babel/types/7.16.8: + resolution: {integrity: sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.12.11 - lodash: 4.17.20 + '@babel/helper-validator-identifier': 7.16.7 to-fast-properties: 2.0.0 dev: true @@ -209,8 +236,8 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/schema/0.1.2: - resolution: {integrity: sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==} + /@istanbuljs/schema/0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true @@ -255,13 +282,8 @@ packages: engines: {node: '>=4'} dev: true - /ansi-regex/4.1.0: - resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==} - engines: {node: '>=6'} - dev: true - - /ansi-regex/5.0.0: - resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: true @@ -279,12 +301,12 @@ packages: color-convert: 2.0.1 dev: true - /anymatch/3.1.1: - resolution: {integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==} + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 - picomatch: 2.2.2 + picomatch: 2.3.1 dev: true /append-transform/2.0.0: @@ -304,12 +326,16 @@ packages: sprintf-js: 1.0.3 dev: true + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + /async/1.5.2: resolution: {integrity: sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=} dev: true - /balanced-match/1.0.0: - resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=} + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true /binary-extensions/2.2.0: @@ -337,7 +363,7 @@ packages: /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: - balanced-match: 1.0.0 + balanced-match: 1.0.2 concat-map: 0.0.1 dev: true @@ -352,6 +378,18 @@ packages: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true + /browserslist/4.19.1: + resolution: {integrity: sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001300 + electron-to-chromium: 1.4.47 + escalade: 3.1.1 + node-releases: 2.0.1 + picocolors: 1.0.0 + dev: true + /buffer-more-ints/1.0.0: resolution: {integrity: sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==} dev: false @@ -376,11 +414,15 @@ packages: engines: {node: '>=6'} dev: true - /camelcase/6.2.0: - resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} + /camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true + /caniuse-lite/1.0.30001300: + resolution: {integrity: sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==} + dev: true + /center-align/0.1.3: resolution: {integrity: sha1-qg0yYptu6XIgBBHL1EYckHvCt60=} engines: {node: '>=0.10.0'} @@ -398,27 +440,27 @@ packages: supports-color: 5.5.0 dev: true - /chalk/4.1.0: - resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==} + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 dev: true - /chokidar/3.4.3: - resolution: {integrity: sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==} + /chokidar/3.5.1: + resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} engines: {node: '>= 8.10.0'} dependencies: - anymatch: 3.1.1 + anymatch: 3.1.2 braces: 3.0.2 - glob-parent: 5.1.1 + glob-parent: 5.1.2 is-binary-path: 2.1.0 - is-glob: 4.0.1 + is-glob: 4.0.3 normalize-path: 3.0.0 readdirp: 3.5.0 optionalDependencies: - fsevents: 2.1.3 + fsevents: 2.3.2 dev: true /claire/0.4.1: @@ -442,22 +484,22 @@ packages: wordwrap: 0.0.2 dev: true - /cliui/5.0.0: - resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} - dependencies: - string-width: 3.1.0 - strip-ansi: 5.2.0 - wrap-ansi: 5.1.0 - dev: true - /cliui/6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: - string-width: 4.2.0 - strip-ansi: 6.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 wrap-ansi: 6.2.0 dev: true + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -487,8 +529,8 @@ packages: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true - /convert-source-map/1.7.0: - resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} + /convert-source-map/1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} dependencies: safe-buffer: 5.1.2 dev: true @@ -508,10 +550,9 @@ packages: ms: 2.0.0 dev: false - /debug/4.2.0_supports-color@7.2.0: - resolution: {integrity: sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==} + /debug/4.3.1_supports-color@8.1.1: + resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} engines: {node: '>=6.0'} - deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -519,11 +560,11 @@ packages: optional: true dependencies: ms: 2.1.2 - supports-color: 7.2.0 + supports-color: 8.1.1 dev: true - /debug/4.3.1: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} + /debug/4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -544,8 +585,8 @@ packages: engines: {node: '>=10'} dev: true - /deep-is/0.1.3: - resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=} + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true /default-require-extensions/3.0.0: @@ -555,13 +596,13 @@ packages: strip-bom: 4.0.0 dev: true - /diff/4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + /diff/5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} dev: true - /emoji-regex/7.0.3: - resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + /electron-to-chromium/1.4.47: + resolution: {integrity: sha512-ZHc8i3/cgeCRK/vC7W2htAG6JqUmOUgDNn/f9yY9J8UjfLjwzwOVEt4MWmgJAdvmxyrsR5KIFA/6+kUHGY0eUA==} dev: true /emoji-regex/8.0.0: @@ -572,6 +613,11 @@ packages: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + /escape-string-regexp/1.0.5: resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} engines: {node: '>=0.8.0'} @@ -628,8 +674,8 @@ packages: to-regex-range: 5.0.1 dev: true - /find-cache-dir/3.3.1: - resolution: {integrity: sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==} + /find-cache-dir/3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} dependencies: commondir: 1.0.1 @@ -637,13 +683,6 @@ packages: pkg-dir: 4.2.0 dev: true - /find-up/3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: true - /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -674,7 +713,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: cross-spawn: 7.0.3 - signal-exit: 3.0.3 + signal-exit: 3.0.6 dev: true /fromentries/1.3.2: @@ -685,11 +724,11 @@ packages: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} dev: true - /fsevents/2.1.3: - resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - deprecated: '"Please update to latest v2.3 or v2.2"' + requiresBuild: true dev: true optional: true @@ -708,11 +747,11 @@ packages: engines: {node: '>=8.0.0'} dev: true - /glob-parent/5.1.1: - resolution: {integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==} + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: - is-glob: 4.0.1 + is-glob: 4.0.3 dev: true /glob/5.0.15: @@ -736,13 +775,24 @@ packages: path-is-absolute: 1.0.1 dev: true + /glob/7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true - /graceful-fs/4.2.4: - resolution: {integrity: sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==} + /graceful-fs/4.2.9: + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} dev: true /growl/1.10.5: @@ -750,8 +800,8 @@ packages: engines: {node: '>=4.x'} dev: true - /handlebars/4.7.6: - resolution: {integrity: sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==} + /handlebars/4.7.7: + resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} engines: {node: '>=0.4.7'} hasBin: true dependencies: @@ -760,7 +810,7 @@ packages: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.12.4 + uglify-js: 3.14.5 dev: true /has-flag/1.0.0: @@ -782,7 +832,7 @@ packages: resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} engines: {node: '>=8'} dependencies: - is-stream: 2.0.0 + is-stream: 2.0.1 type-fest: 0.8.1 dev: true @@ -841,8 +891,8 @@ packages: engines: {node: '>=8'} dev: true - /is-glob/4.0.1: - resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==} + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 @@ -858,8 +908,8 @@ packages: engines: {node: '>=8'} dev: true - /is-stream/2.0.0: - resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true @@ -876,8 +926,8 @@ packages: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} dev: true - /istanbul-lib-coverage/3.0.0: - resolution: {integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==} + /istanbul-lib-coverage/3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true @@ -892,9 +942,9 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.12.10 - '@istanbuljs/schema': 0.1.2 - istanbul-lib-coverage: 3.0.0 + '@babel/core': 7.16.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -906,7 +956,7 @@ packages: dependencies: archy: 1.0.0 cross-spawn: 7.0.3 - istanbul-lib-coverage: 3.0.0 + istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 p-map: 3.0.0 rimraf: 3.0.2 @@ -917,24 +967,24 @@ packages: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: - istanbul-lib-coverage: 3.0.0 + istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 supports-color: 7.2.0 dev: true - /istanbul-lib-source-maps/4.0.0: - resolution: {integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==} - engines: {node: '>=8'} + /istanbul-lib-source-maps/4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} dependencies: - debug: 4.3.1 - istanbul-lib-coverage: 3.0.0 + debug: 4.3.3 + istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports/3.0.2: - resolution: {integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==} + /istanbul-reports/3.1.3: + resolution: {integrity: sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 @@ -954,7 +1004,7 @@ packages: escodegen: 1.8.1 esprima: 2.7.3 glob: 5.0.15 - handlebars: 4.7.6 + handlebars: 4.7.7 js-yaml: 3.14.1 mkdirp: 0.5.5 nopt: 3.0.6 @@ -969,20 +1019,19 @@ packages: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml/3.14.0: - resolution: {integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==} + /js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 dev: true - /js-yaml/3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + /js-yaml/4.0.0: + resolution: {integrity: sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==} hasBin: true dependencies: - argparse: 1.0.10 - esprima: 4.0.1 + argparse: 2.0.1 dev: true /jsesc/2.5.2: @@ -991,8 +1040,8 @@ packages: hasBin: true dev: true - /json5/2.1.3: - resolution: {integrity: sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==} + /json5/2.2.0: + resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} engines: {node: '>=6'} hasBin: true dependencies: @@ -1019,14 +1068,6 @@ packages: type-check: 0.3.2 dev: true - /locate-path/3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: true - /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -1045,15 +1086,11 @@ packages: resolution: {integrity: sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=} dev: true - /lodash/4.17.20: - resolution: {integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==} - dev: true - /log-symbols/4.0.0: resolution: {integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==} engines: {node: '>=10'} dependencies: - chalk: 4.1.0 + chalk: 4.1.2 dev: true /longest/1.0.1: @@ -1085,35 +1122,35 @@ packages: minimist: 1.2.5 dev: true - /mocha/8.2.1: - resolution: {integrity: sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==} + /mocha/8.4.0: + resolution: {integrity: sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==} engines: {node: '>= 10.12.0'} hasBin: true dependencies: '@ungap/promise-all-settled': 1.1.2 ansi-colors: 4.1.1 browser-stdout: 1.3.1 - chokidar: 3.4.3 - debug: 4.2.0_supports-color@7.2.0 - diff: 4.0.2 + chokidar: 3.5.1 + debug: 4.3.1_supports-color@8.1.1 + diff: 5.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 glob: 7.1.6 growl: 1.10.5 he: 1.2.0 - js-yaml: 3.14.0 + js-yaml: 4.0.0 log-symbols: 4.0.0 minimatch: 3.0.4 - ms: 2.1.2 - nanoid: 3.1.12 + ms: 2.1.3 + nanoid: 3.1.20 serialize-javascript: 5.0.1 strip-json-comments: 3.1.1 - supports-color: 7.2.0 + supports-color: 8.1.1 which: 2.0.2 wide-align: 1.1.3 - workerpool: 6.0.2 - yargs: 13.3.2 - yargs-parser: 13.1.2 + workerpool: 6.1.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 yargs-unparser: 2.0.0 dev: true @@ -1125,9 +1162,13 @@ packages: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /nanoid/3.1.12: - resolution: {integrity: sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==} - engines: {node: ^10 || ^12 || >=13.7} + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /nanoid/3.1.20: + resolution: {integrity: sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true @@ -1142,6 +1183,10 @@ packages: process-on-spawn: 1.0.0 dev: true + /node-releases/2.0.1: + resolution: {integrity: sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==} + dev: true + /nopt/3.0.6: resolution: {integrity: sha1-xkZdvwirzU2zWTF/eaxopkayj/k=} hasBin: true @@ -1160,29 +1205,29 @@ packages: hasBin: true dependencies: '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.2 + '@istanbuljs/schema': 0.1.3 caching-transform: 4.0.0 - convert-source-map: 1.7.0 + convert-source-map: 1.8.0 decamelize: 1.2.0 - find-cache-dir: 3.3.1 + find-cache-dir: 3.3.2 find-up: 4.1.0 foreground-child: 2.0.0 get-package-type: 0.1.0 - glob: 7.1.6 - istanbul-lib-coverage: 3.0.0 + glob: 7.2.0 + istanbul-lib-coverage: 3.2.0 istanbul-lib-hook: 3.0.0 istanbul-lib-instrument: 4.0.3 istanbul-lib-processinfo: 2.0.2 istanbul-lib-report: 3.0.0 - istanbul-lib-source-maps: 4.0.0 - istanbul-reports: 3.0.2 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.3 make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 process-on-spawn: 1.0.0 resolve-from: 5.0.0 rimraf: 3.0.2 - signal-exit: 3.0.3 + signal-exit: 3.0.6 spawn-wrap: 2.0.0 test-exclude: 6.0.0 yargs: 15.4.1 @@ -1200,7 +1245,7 @@ packages: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} dependencies: - deep-is: 0.1.3 + deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.3.0 prelude-ls: 1.1.2 @@ -1222,13 +1267,6 @@ packages: yocto-queue: 0.1.0 dev: true - /p-locate/3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - dependencies: - p-limit: 2.3.0 - dev: true - /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -1259,17 +1297,12 @@ packages: resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.4 + graceful-fs: 4.2.9 hasha: 5.2.2 lodash.flattendeep: 4.4.0 release-zalgo: 1.0.0 dev: true - /path-exists/3.0.0: - resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} - engines: {node: '>=4'} - dev: true - /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1285,8 +1318,12 @@ packages: engines: {node: '>=8'} dev: true - /picomatch/2.2.2: - resolution: {integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==} + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true @@ -1337,7 +1374,7 @@ packages: resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} engines: {node: '>=8.10.0'} dependencies: - picomatch: 2.2.2 + picomatch: 2.3.1 dev: true /release-zalgo/1.0.0: @@ -1385,7 +1422,7 @@ packages: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: - glob: 7.1.6 + glob: 7.2.0 dev: true /safe-buffer/5.1.2: @@ -1394,11 +1431,6 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true - /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true @@ -1426,8 +1458,8 @@ packages: engines: {node: '>=8'} dev: true - /signal-exit/3.0.3: - resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} + /signal-exit/3.0.6: + resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==} dev: true /source-map/0.2.0: @@ -1456,7 +1488,7 @@ packages: is-windows: 1.0.2 make-dir: 3.1.0 rimraf: 3.0.2 - signal-exit: 3.0.3 + signal-exit: 3.0.6 which: 2.0.2 dev: true @@ -1472,22 +1504,13 @@ packages: strip-ansi: 4.0.0 dev: true - /string-width/3.1.0: - resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} - engines: {node: '>=6'} - dependencies: - emoji-regex: 7.0.3 - is-fullwidth-code-point: 2.0.0 - strip-ansi: 5.2.0 - dev: true - - /string-width/4.2.0: - resolution: {integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==} + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.0 + strip-ansi: 6.0.1 dev: true /string_decoder/1.3.0: @@ -1503,18 +1526,11 @@ packages: ansi-regex: 3.0.0 dev: true - /strip-ansi/5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - dependencies: - ansi-regex: 4.1.0 - dev: true - - /strip-ansi/6.0.0: - resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: - ansi-regex: 5.0.0 + ansi-regex: 5.0.1 dev: true /strip-bom/4.0.0: @@ -1548,12 +1564,19 @@ packages: has-flag: 4.0.0 dev: true + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: - '@istanbuljs/schema': 0.1.2 - glob: 7.1.6 + '@istanbuljs/schema': 0.1.3 + glob: 7.2.0 minimatch: 3.0.4 dev: true @@ -1598,8 +1621,8 @@ packages: uglify-to-browserify: 1.0.2 dev: true - /uglify-js/3.12.4: - resolution: {integrity: sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A==} + /uglify-js/3.14.5: + resolution: {integrity: sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==} engines: {node: '>=0.8.0'} hasBin: true dev: true @@ -1623,6 +1646,7 @@ packages: /uuid/3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true dev: true @@ -1670,17 +1694,8 @@ packages: resolution: {integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=} dev: true - /workerpool/6.0.2: - resolution: {integrity: sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==} - dev: true - - /wrap-ansi/5.1.0: - resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} - engines: {node: '>=6'} - dependencies: - ansi-styles: 3.2.1 - string-width: 3.1.0 - strip-ansi: 5.2.0 + /workerpool/6.1.0: + resolution: {integrity: sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==} dev: true /wrap-ansi/6.2.0: @@ -1688,8 +1703,17 @@ packages: engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 - string-width: 4.2.0 - strip-ansi: 6.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 dev: true /wrappy/1.0.2: @@ -1701,19 +1725,17 @@ packages: dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 - signal-exit: 3.0.3 + signal-exit: 3.0.6 typedarray-to-buffer: 3.1.5 dev: true - /y18n/4.0.1: - resolution: {integrity: sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==} + /y18n/4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true - /yargs-parser/13.1.2: - resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} dev: true /yargs-parser/18.1.3: @@ -1724,31 +1746,21 @@ packages: decamelize: 1.2.0 dev: true + /yargs-parser/20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + dev: true + /yargs-unparser/2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} dependencies: - camelcase: 6.2.0 + camelcase: 6.3.0 decamelize: 4.0.0 flat: 5.0.2 is-plain-obj: 2.1.0 dev: true - /yargs/13.3.2: - resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} - dependencies: - cliui: 5.0.0 - find-up: 3.0.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 3.1.0 - which-module: 2.0.0 - y18n: 4.0.1 - yargs-parser: 13.1.2 - dev: true - /yargs/15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} @@ -1760,12 +1772,25 @@ packages: require-directory: 2.1.1 require-main-filename: 2.0.0 set-blocking: 2.0.0 - string-width: 4.2.0 + string-width: 4.2.3 which-module: 2.0.0 - y18n: 4.0.1 + y18n: 4.0.3 yargs-parser: 18.1.3 dev: true + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + dev: true + /yargs/3.10.0: resolution: {integrity: sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=} dependencies: From 763e76342f7da9291f4e6fe5eac77395b56108f3 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 18 Jan 2022 12:21:29 +0000 Subject: [PATCH 24/30] Bump version for publish --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7e2c0673..f31d21dc 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@worthaboutapig/amqplib", "homepage": "http://squaremo.github.io/amqp.node/", "main": "./channel_api.js", - "version": "0.6.0", + "version": "0.6.1", "description": "An AMQP 0-9-1 (e.g., RabbitMQ) library and client.", "repository": { "type": "git", From b38813367597e658ef12eca16b2a1162889d0625 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 18 Jan 2022 15:02:20 +0000 Subject: [PATCH 25/30] Add some simple TypeScript typedefs --- Makefile | 1 + amqplib.d.ts | 34 ++++++++++++++++++++++++++++++++++ lib/amqplib.d.ts | 34 ++++++++++++++++++++++++++++++++++ package.json | 3 ++- 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 amqplib.d.ts create mode 100644 lib/amqplib.d.ts diff --git a/Makefile b/Makefile index be912c85..135384eb 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,7 @@ lib/defs.js: $(UGLIFY) bin/generate-defs.js bin/amqp-rabbitmq-0.9.1.json $(UGLIFY) ./lib/defs.js -o ./lib/defs.js \ -c 'sequences=false' --comments \ -b 'indent-level=2' 2>&1 | (grep -v 'WARN' || true) + (cp ./amqplib.d.ts ./lib) test: lib/defs.js $(MOCHA) --check-leaks -u tdd test/ diff --git a/amqplib.d.ts b/amqplib.d.ts new file mode 100644 index 00000000..c815861a --- /dev/null +++ b/amqplib.d.ts @@ -0,0 +1,34 @@ +declare module "@worthaboutapig/amqplib"; + +type CloseHandler = () => void; +type ErrorHandler = (error: Error) => void; +type IMessage = { content: string }; + +interface CommonChannelConnection { + close(): Promise; + on(event: string, handler: CloseHandler | ErrorHandler): void; + removeListener(name: string, handler: CloseHandler | ErrorHandler): void; + valid: boolean; +} + +interface IChannel extends CommonChannelConnection { + handlers?: ChannelEventHandlers; + assertQueue(name: string, options: unknown): Promise; + consume(name: string, handler: (message: IMessage) => Promise, options: { noAck: boolean }): Promise; + sendToQueue(name: string, data: unknown, options: { persistent: true }): boolean; +} + +interface IConnection extends CommonChannelConnection { + handlers?: ConnectionEventHandlers; + createChannel(): Promise; +} + +type ConnectionEventHandlers = { + onConnectionError(error: Error): Promise; + onConnectionClose(): Promise; +}; + +type ChannelEventHandlers = { + onChannelError(error: Error): Promise; + onChannelClose(): Promise; +}; diff --git a/lib/amqplib.d.ts b/lib/amqplib.d.ts new file mode 100644 index 00000000..c815861a --- /dev/null +++ b/lib/amqplib.d.ts @@ -0,0 +1,34 @@ +declare module "@worthaboutapig/amqplib"; + +type CloseHandler = () => void; +type ErrorHandler = (error: Error) => void; +type IMessage = { content: string }; + +interface CommonChannelConnection { + close(): Promise; + on(event: string, handler: CloseHandler | ErrorHandler): void; + removeListener(name: string, handler: CloseHandler | ErrorHandler): void; + valid: boolean; +} + +interface IChannel extends CommonChannelConnection { + handlers?: ChannelEventHandlers; + assertQueue(name: string, options: unknown): Promise; + consume(name: string, handler: (message: IMessage) => Promise, options: { noAck: boolean }): Promise; + sendToQueue(name: string, data: unknown, options: { persistent: true }): boolean; +} + +interface IConnection extends CommonChannelConnection { + handlers?: ConnectionEventHandlers; + createChannel(): Promise; +} + +type ConnectionEventHandlers = { + onConnectionError(error: Error): Promise; + onConnectionClose(): Promise; +}; + +type ChannelEventHandlers = { + onChannelError(error: Error): Promise; + onChannelClose(): Promise; +}; diff --git a/package.json b/package.json index f31d21dc..a1157f1c 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,6 @@ "RabbitMQ" ], "author": "Michael Bridgen ", - "license": "MIT" + "license": "MIT", + "typings": "./lib/amqplib.d.ts" } From 644bea73b391b3dd3cb8fcaeb524ee7fa9d7809d Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 18 Jan 2022 15:03:02 +0000 Subject: [PATCH 26/30] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a1157f1c..8214fa7e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@worthaboutapig/amqplib", "homepage": "http://squaremo.github.io/amqp.node/", "main": "./channel_api.js", - "version": "0.6.1", + "version": "0.6.2", "description": "An AMQP 0-9-1 (e.g., RabbitMQ) library and client.", "repository": { "type": "git", From 3f6c465259945db0ad2847c89bbf8a06a27dc6c5 Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 18 Jan 2022 15:07:44 +0000 Subject: [PATCH 27/30] Remove unnecessary "declare" --- amqplib.d.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/amqplib.d.ts b/amqplib.d.ts index c815861a..e4b7fc66 100644 --- a/amqplib.d.ts +++ b/amqplib.d.ts @@ -1,5 +1,3 @@ -declare module "@worthaboutapig/amqplib"; - type CloseHandler = () => void; type ErrorHandler = (error: Error) => void; type IMessage = { content: string }; From 968b6c15fed581ed2798ab509ce81afe3e35300c Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 18 Jan 2022 15:09:55 +0000 Subject: [PATCH 28/30] Remove from build --- Makefile | 1 - lib/amqplib.d.ts | 34 ---------------------------------- package.json | 2 +- 3 files changed, 1 insertion(+), 36 deletions(-) delete mode 100644 lib/amqplib.d.ts diff --git a/Makefile b/Makefile index 135384eb..be912c85 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,6 @@ lib/defs.js: $(UGLIFY) bin/generate-defs.js bin/amqp-rabbitmq-0.9.1.json $(UGLIFY) ./lib/defs.js -o ./lib/defs.js \ -c 'sequences=false' --comments \ -b 'indent-level=2' 2>&1 | (grep -v 'WARN' || true) - (cp ./amqplib.d.ts ./lib) test: lib/defs.js $(MOCHA) --check-leaks -u tdd test/ diff --git a/lib/amqplib.d.ts b/lib/amqplib.d.ts deleted file mode 100644 index c815861a..00000000 --- a/lib/amqplib.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -declare module "@worthaboutapig/amqplib"; - -type CloseHandler = () => void; -type ErrorHandler = (error: Error) => void; -type IMessage = { content: string }; - -interface CommonChannelConnection { - close(): Promise; - on(event: string, handler: CloseHandler | ErrorHandler): void; - removeListener(name: string, handler: CloseHandler | ErrorHandler): void; - valid: boolean; -} - -interface IChannel extends CommonChannelConnection { - handlers?: ChannelEventHandlers; - assertQueue(name: string, options: unknown): Promise; - consume(name: string, handler: (message: IMessage) => Promise, options: { noAck: boolean }): Promise; - sendToQueue(name: string, data: unknown, options: { persistent: true }): boolean; -} - -interface IConnection extends CommonChannelConnection { - handlers?: ConnectionEventHandlers; - createChannel(): Promise; -} - -type ConnectionEventHandlers = { - onConnectionError(error: Error): Promise; - onConnectionClose(): Promise; -}; - -type ChannelEventHandlers = { - onChannelError(error: Error): Promise; - onChannelClose(): Promise; -}; diff --git a/package.json b/package.json index 8214fa7e..186592bb 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@worthaboutapig/amqplib", "homepage": "http://squaremo.github.io/amqp.node/", "main": "./channel_api.js", - "version": "0.6.2", + "version": "0.6.3", "description": "An AMQP 0-9-1 (e.g., RabbitMQ) library and client.", "repository": { "type": "git", From 6e365dcd91d96d813ff5482138b84e806b119aee Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 18 Jan 2022 15:13:34 +0000 Subject: [PATCH 29/30] We Do need declare module :D --- amqplib.d.ts | 2 ++ package.json | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/amqplib.d.ts b/amqplib.d.ts index e4b7fc66..c815861a 100644 --- a/amqplib.d.ts +++ b/amqplib.d.ts @@ -1,3 +1,5 @@ +declare module "@worthaboutapig/amqplib"; + type CloseHandler = () => void; type ErrorHandler = (error: Error) => void; type IMessage = { content: string }; diff --git a/package.json b/package.json index 186592bb..23b95a43 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@worthaboutapig/amqplib", "homepage": "http://squaremo.github.io/amqp.node/", "main": "./channel_api.js", - "version": "0.6.3", + "version": "0.6.5", "description": "An AMQP 0-9-1 (e.g., RabbitMQ) library and client.", "repository": { "type": "git", @@ -34,5 +34,5 @@ ], "author": "Michael Bridgen ", "license": "MIT", - "typings": "./lib/amqplib.d.ts" + "typings": "./amqplib.d.ts" } From eb73e6ece84cc96acac043d633d43459e85df35f Mon Sep 17 00:00:00 2001 From: Jeremy Clarke Date: Tue, 18 Jan 2022 16:08:51 +0000 Subject: [PATCH 30/30] Improve the typedefs further --- amqplib.d.ts | 58 +++++++++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/amqplib.d.ts b/amqplib.d.ts index c815861a..709597fa 100644 --- a/amqplib.d.ts +++ b/amqplib.d.ts @@ -1,34 +1,36 @@ -declare module "@worthaboutapig/amqplib"; +declare module "@worthaboutapig/amqplib" { + export type CloseHandler = () => void; + export type ErrorHandler = (error: Error) => void; + export type IMessage = { content: string }; -type CloseHandler = () => void; -type ErrorHandler = (error: Error) => void; -type IMessage = { content: string }; + export interface CommonChannelConnection { + close(): Promise; + on(event: string, handler: CloseHandler | ErrorHandler): void; + removeListener(name: string, handler: CloseHandler | ErrorHandler): void; + valid: boolean; + } -interface CommonChannelConnection { - close(): Promise; - on(event: string, handler: CloseHandler | ErrorHandler): void; - removeListener(name: string, handler: CloseHandler | ErrorHandler): void; - valid: boolean; -} + export interface IChannel extends CommonChannelConnection { + handlers?: ChannelEventHandlers; + assertQueue(name: string, options: unknown): Promise; + consume(name: string, handler: (message: IMessage) => Promise, options: { noAck: boolean }): Promise; + sendToQueue(name: string, data: unknown, options: { persistent: true }): boolean; + } -interface IChannel extends CommonChannelConnection { - handlers?: ChannelEventHandlers; - assertQueue(name: string, options: unknown): Promise; - consume(name: string, handler: (message: IMessage) => Promise, options: { noAck: boolean }): Promise; - sendToQueue(name: string, data: unknown, options: { persistent: true }): boolean; -} + export interface IConnection extends CommonChannelConnection { + handlers?: ConnectionEventHandlers; + createChannel(): Promise; + } -interface IConnection extends CommonChannelConnection { - handlers?: ConnectionEventHandlers; - createChannel(): Promise; -} + export type ConnectionEventHandlers = { + onConnectionError(error: Error): Promise; + onConnectionClose(): Promise; + }; -type ConnectionEventHandlers = { - onConnectionError(error: Error): Promise; - onConnectionClose(): Promise; -}; + export type ChannelEventHandlers = { + onChannelError(error: Error): Promise; + onChannelClose(): Promise; + }; -type ChannelEventHandlers = { - onChannelError(error: Error): Promise; - onChannelClose(): Promise; -}; + export function connect(url: string, connOptions: unknown): Promise; +} diff --git a/package.json b/package.json index 23b95a43..67fedad6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@worthaboutapig/amqplib", "homepage": "http://squaremo.github.io/amqp.node/", "main": "./channel_api.js", - "version": "0.6.5", + "version": "0.6.6", "description": "An AMQP 0-9-1 (e.g., RabbitMQ) library and client.", "repository": { "type": "git",