diff --git a/.eslintrc.js b/.eslintrc.js index 40e7e7db..777be63a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,12 +4,31 @@ module.exports = { 'mocha': true, 'es6': true }, - 'extends': 'eslint:recommended', + 'extends': ['eslint:recommended', + 'plugin:@typescript-eslint/recommended' + ], + 'parser': '@typescript-eslint/parser', + 'plugins': ['@typescript-eslint'], 'parserOptions': { 'sourceType': 'module', - "ecmaVersion": 8 + 'ecmaVersion': 8 }, 'rules': { + 'no-console': ['error'], + 'no-var': ['error'], + 'no-empty-function': ['error'], + 'comma-dangle': ['error', 'never'], + 'prefer-const': ['error'], + 'quotes': ['error', 'single'], + 'comma-spacing': ['error', { before: false, after: true }], + 'semi-spacing': ['warn', { before: false, after: true }], + 'space-before-blocks': ['warn', 'always'], + 'switch-colon-spacing': ['warn', { after: true, before: false }], + 'keyword-spacing': ['warn', { before: true, after: true }], + 'template-curly-spacing': ['error', 'never'], + 'rest-spread-spacing': ['error', 'never'], + 'no-multi-spaces': ['warn', { ignoreEOLComments: false }], + 'indent': [ 'error', 2, @@ -23,19 +42,41 @@ module.exports = { ], 'linebreak-style': [ 'error', - (process.platform === 'win32' ? 'windows' : 'unix') // all windows platforms are denoted by win32 + 'unix' ], 'semi': ['error', 'never'], 'spaced-comment': ['error', 'always', { 'line': { 'markers': ['/'], 'exceptions': ['-', '+'] - }, - 'block': { - 'markers': ['!'], - 'exceptions': ['*'], - 'balanced': true - } - }] + }, + 'block': { + 'markers': ['!'], + 'exceptions': ['*'], + 'balanced': true + } + }], + '@typescript-eslint/no-explicit-any': ['warn'], + + '@typescript-eslint/prefer-optional-chain': ['warn'], + '@typescript-eslint/no-empty-function': ['warn'], + '@typescript-eslint/no-empty-interface': ['warn'], + + '@typescript-eslint/no-array-constructor': ['off'], + + 'no-extra-parens': ['off'], + '@typescript-eslint/no-extra-parens': [ + 'error', + 'all', + { + ignoreJSX: 'multi-line', + returnAssign: true, + conditionalAssign: true, + nestedBinaryExpressions: false, + enforceForArrowConditionals: false, + enforceForSequenceExpressions: false, + enforceForNewInMemberExpressions: false + } + ] } } diff --git a/examples/bucket-exists.js b/examples/bucket-exists.js index e9f8c39d..49cdd359 100644 --- a/examples/bucket-exists.js +++ b/examples/bucket-exists.js @@ -14,13 +14,13 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are - // dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are +// dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -31,6 +31,6 @@ s3Client.bucketExists('my-bucketname', function(err, exists) { return console.log(err) } if (exists) { - console.log("Bucket exists.") + console.log('Bucket exists.') } }) diff --git a/examples/compose-object-test-example.js b/examples/compose-object-test-example.js index cc439b6f..e0bc1940 100644 --- a/examples/compose-object-test-example.js +++ b/examples/compose-object-test-example.js @@ -17,14 +17,14 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-objectname // are dummy values, please replace them with original values. const os = require('os') -const splitFile = require("split-file") +const splitFile = require('split-file') const fs = require('fs') -var Minio = require("../dist/main/minio") -var Helpers = require("../dist/main/helpers") +const Minio = require('../dist/main/minio') +const Helpers = require('../dist/main/helpers') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -35,43 +35,43 @@ const oneMB = 1024 * 1024 // Create a bucket prior to running: mc mb local/source-bucket function sampleRunComposeObject() { - var tmpDir = os.tmpdir() + const tmpDir = os.tmpdir() - const bucketName = "source-bucket" + const bucketName = 'source-bucket' // generate 100 MB buffer and write to a file. - var local100mbFileToBeSplitAndComposed = Buffer.alloc(100 * oneMB, 0) + const local100mbFileToBeSplitAndComposed = Buffer.alloc(100 * oneMB, 0) const composedObjName = '_100-mb-file-to-test-compose' const tmpSubDir = `${tmpDir}/compose` - var fileToSplit = `${tmpSubDir}/${composedObjName}` - let partObjNameList = [] + const fileToSplit = `${tmpSubDir}/${composedObjName}` + const partObjNameList = [] fs.mkdir(tmpSubDir, { recursive: true }, function(err) { if (err) { console.log(err) } else { - console.log("New Temp directory successfully created.") + console.log('New Temp directory successfully created.') } }) try { fs.writeFileSync(fileToSplit, local100mbFileToBeSplitAndComposed) - console.log("Written 100 MB File ") + console.log('Written 100 MB File ') // 100 MB split into 26 MB part size. ( just to test unequal parts ). But change as required. - splitFile.splitFileBySize(fileToSplit, (26 * oneMB)) + splitFile.splitFileBySize(fileToSplit, 26 * oneMB) .then((names) => { - console.log("Split and write 100 MB File(s) ", names) + console.log('Split and write 100 MB File(s) ', names) const putPartRequests = names.map((partFileName) => { - const partObjName = partFileName.slice((tmpSubDir + "/").length) + const partObjName = partFileName.slice((tmpSubDir + '/').length) partObjNameList.push(partObjName) return s3Client.fPutObject(bucketName, partObjName, partFileName, {}) }) Promise.all(putPartRequests).then(() => { - console.log("Uploaded part Files: ", names) + console.log('Uploaded part Files: ', names) const sourcePartObjList = partObjNameList.map((partObjName) => { return new Helpers.CopySourceOptions({ Bucket: bucketName, @@ -85,7 +85,7 @@ function sampleRunComposeObject() { }) s3Client.composeObject(destObjConfig, sourcePartObjList).then(() => { - console.log("Composed to a single file: ", composedObjName) + console.log('Composed to a single file: ', composedObjName) /** Begin Clean up ***/ // To verify that the parts are uploaded properly, comment the below code blocks and verify @@ -94,7 +94,7 @@ function sampleRunComposeObject() { }) Promise.all(sourcePartObjList).then(() => { - console.log("Removed source parts: ") + console.log('Removed source parts: ') // Uncomment to remove the composed object itself. commented for verification. /* @@ -106,32 +106,32 @@ function sampleRunComposeObject() { */ }).catch(er => { - console.log("Error removing parts used in composing", er) + console.log('Error removing parts used in composing', er) }) /** End Clean up **/ // Clean up generated parts locally Helpers.removeDirAndFiles(tmpSubDir) - console.log("Clean up temp parts directory : ") + console.log('Clean up temp parts directory : ') }).catch((e) => { - console.log("Error Composing parts into an object", e) + console.log('Error Composing parts into an object', e) }) }).catch(e => { - console.log("Error Uploading parts ", e) + console.log('Error Uploading parts ', e) }) }) .catch((e) => { // this is a client error not related to compose object - console.log("Error Splitting files into parts ", e) + console.log('Error Splitting files into parts ', e) }) } catch (err) { // this is a client error not related to compose object - console.log("Error Creating local files ", err) + console.log('Error Creating local files ', err) } diff --git a/examples/compose-object.js b/examples/compose-object.js index 0704df73..3287e82f 100644 --- a/examples/compose-object.js +++ b/examples/compose-object.js @@ -17,39 +17,39 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-objectname // are dummy values, please replace them with original values. -var Minio = require("../dist/main/minio") -var Helpers = require("../dist/main/helpers") +const Minio = require('../dist/main/minio') +const Helpers = require('../dist/main/helpers') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -const bucketName = "source-bucket" +const bucketName = 'source-bucket' const sourceList = [new Helpers.CopySourceOptions( { Bucket: bucketName, - Object: "parta", + Object: 'parta' // other options if any. -}),new Helpers.CopySourceOptions({ +}), new Helpers.CopySourceOptions({ Bucket: bucketName, - Object: "partb", + Object: 'partb' // other options if any. // VersionID:"" -}),new Helpers.CopySourceOptions({ +}), new Helpers.CopySourceOptions({ Bucket: bucketName, - Object: "partc", + Object: 'partc' -}),new Helpers.CopySourceOptions({ +}), new Helpers.CopySourceOptions({ Bucket: bucketName, - Object: "partd", + Object: 'partd' })] const destOption = new Helpers.CopyDestinationOptions({ Bucket: bucketName, - Object: "100MB.zip", + Object: '100MB.zip' /** Other possible options */ /* Encryption:{ type:Helpers.ENCRYPTION_TYPES.KMS, @@ -66,10 +66,10 @@ const destOption = new Helpers.CopyDestinationOptions({ }) -const composePromise = s3Client.composeObject(destOption,sourceList) +const composePromise = s3Client.composeObject(destOption, sourceList) composePromise.then((result) => { - console.log("ComposeObject Success..." , result) + console.log('ComposeObject Success...', result) }) .catch((e)=>{ - console.log("composeObject Promise Error",e) + console.log('composeObject Promise Error', e) }) diff --git a/examples/copy-object.js b/examples/copy-object.js index 4972d5e1..681df302 100644 --- a/examples/copy-object.js +++ b/examples/copy-object.js @@ -14,26 +14,26 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname, my-objectname, - // my-src-bucketname and my-src-objectname are dummy values, please replace - // them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname, my-objectname, +// my-src-bucketname and my-src-objectname are dummy values, please replace +// them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -var conds = new Minio.CopyConditions() +const conds = new Minio.CopyConditions() conds.setMatchETag('bd891862ea3e22c93ed53a098218791d') s3Client.copyObject('my-bucketname', 'my-objectname', '/my-src-bucketname/my-src-objectname', conds, function(e, data) { if (e) { return console.log(e) } - console.log("Successfully copied the object:") - console.log("etag = " + data.etag + ", lastModified = " + data.lastModified) + console.log('Successfully copied the object:') + console.log('etag = ' + data.etag + ', lastModified = ' + data.lastModified) }) diff --git a/examples/fget-object.js b/examples/fget-object.js index 77e71b36..e2247670 100644 --- a/examples/fget-object.js +++ b/examples/fget-object.js @@ -17,9 +17,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-objectname // are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -33,8 +33,8 @@ s3Client.fGetObject('my-bucketname', 'my-objectname', '/tmp/objfile', function(e console.log('done') }) -//To get a specific version of an object -s3Client.fGetObject('my-bucketname', 'my-objectname', '/tmp/objfile', {versionId:"03fd1247-90d9-4b71-a27e-209d484a234b"}, function(e) { +// To get a specific version of an object +s3Client.fGetObject('my-bucketname', 'my-objectname', '/tmp/objfile', {versionId:'03fd1247-90d9-4b71-a27e-209d484a234b'}, function(e) { if (e) { return console.log(e) } diff --git a/examples/fput-object.js b/examples/fput-object.js index a4f50597..3b2bb2c4 100644 --- a/examples/fput-object.js +++ b/examples/fput-object.js @@ -14,19 +14,19 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-testfile, my-bucketname - // and my-objectname are dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-testfile, my-bucketname +// and my-objectname are dummy values, please replace them with original values. -var Minio = require('minio') -var Fs = require('fs') +const Minio = require('minio') +const Fs = require('fs') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -var metaData = { +const metaData = { 'Content-Type': 'application/octet-stream', 'X-Amz-Meta-Testing': 1234, 'example': 5678 @@ -38,7 +38,7 @@ s3Client.fPutObject('my-bucketname', 'my-objectname', file, metaData, function(e if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) // Put a file in bucket my-bucketname with content-type detected automatically. @@ -48,5 +48,5 @@ s3Client.fPutObject('my-bucketname', 'my-objectname', file, function(e) { if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) diff --git a/examples/get-bucket-encryption.js b/examples/get-bucket-encryption.js index d3db82c7..3e6001b5 100644 --- a/examples/get-bucket-encryption.js +++ b/examples/get-bucket-encryption.js @@ -18,15 +18,15 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.getBucketEncryption("my-bucket", function (error, enConfig){ +s3Client.getBucketEncryption('my-bucket', function (error, enConfig) { if (error) { return console.log(error) } diff --git a/examples/get-bucket-lifecycle.js b/examples/get-bucket-lifecycle.js index 6dd16413..95185e9a 100644 --- a/examples/get-bucket-lifecycle.js +++ b/examples/get-bucket-lifecycle.js @@ -17,19 +17,19 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.getBucketLifecycle('my-bucketname', function (err,res){ +s3Client.getBucketLifecycle('my-bucketname', function (err, res) { if (err) { return console.log(err) } console.log(res) - console.log("Success") + console.log('Success') }) \ No newline at end of file diff --git a/examples/get-bucket-notification.js b/examples/get-bucket-notification.js index dc36001d..779b0b26 100644 --- a/examples/get-bucket-notification.js +++ b/examples/get-bucket-notification.js @@ -14,13 +14,13 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are - // dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are +// dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -31,6 +31,6 @@ s3Client.getBucketNotification('my-bucketname', function(e, bucketNotification) return console.log(e) } console.log(bucketNotification) - console.log("True") + console.log('True') }) diff --git a/examples/get-bucket-policy.js b/examples/get-bucket-policy.js index 6e2a8027..55234ab0 100644 --- a/examples/get-bucket-policy.js +++ b/examples/get-bucket-policy.js @@ -17,9 +17,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname // are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -27,7 +27,7 @@ var s3Client = new Minio.Client({ // Retrieves the bucket policy and logs it to the console. s3Client.getBucketPolicy('testbucket', (err, policy) => { - if (err) throw err + if (err) throw err - console.log(`Bucket policy: ${policy}`) + console.log(`Bucket policy: ${policy}`) }) diff --git a/examples/get-bucket-replication.js b/examples/get-bucket-replication.js index 3e37a595..9cd36eb9 100644 --- a/examples/get-bucket-replication.js +++ b/examples/get-bucket-replication.js @@ -17,15 +17,15 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.getBucketReplication('bucketname', function (err, replicationConfig){ +s3Client.getBucketReplication('bucketname', function (err, replicationConfig) { if (err) { return console.log(err) } diff --git a/examples/get-bucket-tagging.js b/examples/get-bucket-tagging.js index bb03e273..67ed92ae 100644 --- a/examples/get-bucket-tagging.js +++ b/examples/get-bucket-tagging.js @@ -18,18 +18,18 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.getBucketTagging('bucketname', function (err, tagsList){ +s3Client.getBucketTagging('bucketname', function (err, tagsList) { if (err) { return console.log(err) } - console.log("Success", tagsList) + console.log('Success', tagsList) }) \ No newline at end of file diff --git a/examples/get-bucket-versioning.js b/examples/get-bucket-versioning.js index 41240ede..011804b1 100644 --- a/examples/get-bucket-versioning.js +++ b/examples/get-bucket-versioning.js @@ -17,19 +17,19 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.getBucketVersioning('my-bucketname', function (err,res){ +s3Client.getBucketVersioning('my-bucketname', function (err, res) { if (err) { return console.log(err) } console.log(res) - console.log("Success") + console.log('Success') }) \ No newline at end of file diff --git a/examples/get-object-legal-hold.js b/examples/get-object-legal-hold.js index 1e42a14b..c0fb6fbe 100644 --- a/examples/get-object-legal-hold.js +++ b/examples/get-object-legal-hold.js @@ -17,15 +17,15 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -//Get Legalhold config +// Get Legalhold config s3Client.getObjectLegalHold('bucketName', 'objectName', {}, function(err, res) { if (err) { return console.log('Unable to get legal hold config for the object', err.message) // Print only the message. @@ -33,7 +33,7 @@ s3Client.getObjectLegalHold('bucketName', 'objectName', {}, function(err, res) { console.log(res) }) -//With versionId +// With versionId s3Client.getObjectLegalHold('bucketName', 'objectName', { versionId:'my-obj-version-uuid' }, function(err, res) { if (err) { return console.log('Unable to get legal hold config for the object', err.message) // Print only the message. @@ -41,10 +41,10 @@ s3Client.getObjectLegalHold('bucketName', 'objectName', { versionId:'my-obj-vers console.log(res) }) -//Promise based version: +// Promise based version: const objectLegalHoldPromise = s3Client.getObjectLegalHold('bucketName', 'objectName', { versionId:'my-obj-version-uuid' }) objectLegalHoldPromise.then((data) => { - console.log("Success...", data) + console.log('Success...', data) }) .catch((e)=>{ // Print only the error message. if called on an object without object lock config. diff --git a/examples/get-object-lock-config.js b/examples/get-object-lock-config.js index 7c18cd26..98c77748 100644 --- a/examples/get-object-lock-config.js +++ b/examples/get-object-lock-config.js @@ -17,16 +17,16 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.getObjectLockConfig('my-bucketname', function (err,lockConfig){ +s3Client.getObjectLockConfig('my-bucketname', function (err, lockConfig) { if (err) { return console.log(err) } diff --git a/examples/get-object-retention.js b/examples/get-object-retention.js index dc9909b3..330da50d 100644 --- a/examples/get-object-retention.js +++ b/examples/get-object-retention.js @@ -17,9 +17,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -27,14 +27,14 @@ var s3Client = new Minio.Client({ const bucketName = 'my-bucket' -const objectName ="my-object" +const objectName ='my-object' -const versionId ="my-versionId" +const versionId ='my-versionId' const objRetPromise = s3Client.getObjectRetention(bucketName, objectName, {versionId:versionId} ) objRetPromise.then((data) => { - console.log("Success", data) + console.log('Success', data) }) .catch((e)=>{ - console.log(" Error",e) + console.log(' Error', e) }) \ No newline at end of file diff --git a/examples/get-object-tagging.js b/examples/get-object-tagging.js index bc52ce74..0b90c4e3 100644 --- a/examples/get-object-tagging.js +++ b/examples/get-object-tagging.js @@ -18,27 +18,27 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.getObjectTagging('bucketname', "objectName", function (err, tagsList){ +s3Client.getObjectTagging('bucketname', 'objectName', function (err, tagsList) { if (err) { return console.log(err) } - console.log("Success",tagsList) + console.log('Success', tagsList) }) -//Get tags on a version of an object. +// Get tags on a version of an object. -s3Client.getObjectTagging('bucketname', "objectName", { versionId: "" }, function (err, tagsList){ +s3Client.getObjectTagging('bucketname', 'objectName', { versionId: '' }, function (err, tagsList) { if (err) { return console.log(err) } - console.log("Success",tagsList) + console.log('Success', tagsList) }) \ No newline at end of file diff --git a/examples/get-object.js b/examples/get-object.js index 7945148f..d74eb349 100644 --- a/examples/get-object.js +++ b/examples/get-object.js @@ -17,15 +17,15 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-objectname // are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -var size = 0 +let size = 0 // Get a full object. s3Client.getObject('my-bucketname', 'my-objectname', function(e, dataStream) { if (e) { @@ -35,16 +35,16 @@ s3Client.getObject('my-bucketname', 'my-objectname', function(e, dataStream) { size += chunk.length }) dataStream.on('end', function() { - console.log("End. Total size = " + size) + console.log('End. Total size = ' + size) }) dataStream.on('error', function(e) { console.log(e) }) }) -//Get a specific version of an object -var versionedObjSize = 0 -s3Client.getObject('my-versioned-bucket', 'my-versioned-object', {versionId:"my-versionId"}, function(err, dataStream) { +// Get a specific version of an object +let versionedObjSize = 0 +s3Client.getObject('my-versioned-bucket', 'my-versioned-object', {versionId:'my-versionId'}, function(err, dataStream) { if (err) { return console.log(err) } diff --git a/examples/get-partialobject.js b/examples/get-partialobject.js index 8b7d46ab..1d18608f 100644 --- a/examples/get-partialobject.js +++ b/examples/get-partialobject.js @@ -18,16 +18,16 @@ // are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) // Download the object my-objectname at an offset 1024, for a total of 4096 bytes. -var size = 0 +let size = 0 s3Client.getPartialObject('my-bucketname', 'my-objectname', 1024, 4096, function(e, dataStream) { if (e) { return console.log(e) @@ -36,16 +36,16 @@ s3Client.getPartialObject('my-bucketname', 'my-objectname', 1024, 4096, function size += chunk.length }) dataStream.on('end', function() { - console.log("End. Total size = " + size) + console.log('End. Total size = ' + size) }) dataStream.on('error', function(e) { console.log(e) }) }) -var versionedObjSize = 0 +let versionedObjSize = 0 // reads 30 bytes from the offset 10. -s3Client.getPartialObject('mybucket', 'photo.jpg', 10, 30, {versionId:"my-versionId"},function(err, dataStream) { +s3Client.getPartialObject('mybucket', 'photo.jpg', 10, 30, {versionId:'my-versionId'}, function(err, dataStream) { if (err) { return console.log(err) } diff --git a/examples/list-buckets.js b/examples/list-buckets.js index 1d2b80c1..4d271a5c 100644 --- a/examples/list-buckets.js +++ b/examples/list-buckets.js @@ -17,9 +17,9 @@ // Note: YOUR-ACCESSKEYID and YOUR-SECRETACCESSKEY are dummy values, please // replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' diff --git a/examples/list-incomplete-uploads.js b/examples/list-incomplete-uploads.js index f90e7a92..2fe80295 100644 --- a/examples/list-incomplete-uploads.js +++ b/examples/list-incomplete-uploads.js @@ -14,19 +14,19 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-prefixname - // are dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-prefixname +// are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ - endPoint: 's3.amazonaws.com', - accessKey: 'YOUR-ACCESSKEYID', - secretKey: 'YOUR-SECRETACCESSKEY' +const s3Client = new Minio.Client({ + endPoint: 's3.amazonaws.com', + accessKey: 'YOUR-ACCESSKEYID', + secretKey: 'YOUR-SECRETACCESSKEY' }) // List all object paths in bucket my-bucketname that begins with my-prefixname. -var incompleteObjectsStream = s3Client.listIncompleteUploads('my-bucketname', 'my-prefixname', true) +const incompleteObjectsStream = s3Client.listIncompleteUploads('my-bucketname', 'my-prefixname', true) incompleteObjectsStream.on('data', function(obj) { console.log(obj) }) diff --git a/examples/list-objects-v2-with-metadata.js b/examples/list-objects-v2-with-metadata.js index b208dfa0..bbe685a8 100644 --- a/examples/list-objects-v2-with-metadata.js +++ b/examples/list-objects-v2-with-metadata.js @@ -14,19 +14,19 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are - // dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are +// dummy values, please replace them with original values. - var Minio = require('minio') +const Minio = require('minio') - var s3Client = new Minio.Client({ - endPoint: 's3.amazonaws.com', - accessKey: 'YOUR-ACCESSKEYID', - secretKey: 'YOUR-SECRETACCESSKEY' - }) - // List all object paths in bucket my-bucketname. - var objectsStream = s3Client.extensions.listObjectsV2WithMetadata('my-bucketname', '', true,''); - objectsStream.on('data', function(obj) { +const s3Client = new Minio.Client({ + endPoint: 's3.amazonaws.com', + accessKey: 'YOUR-ACCESSKEYID', + secretKey: 'YOUR-SECRETACCESSKEY' +}) +// List all object paths in bucket my-bucketname. +const objectsStream = s3Client.extensions.listObjectsV2WithMetadata('my-bucketname', '', true, '') +objectsStream.on('data', function(obj) { console.log(obj) }) objectsStream.on('error', function(e) { diff --git a/examples/list-objects-v2.js b/examples/list-objects-v2.js index a7347b78..3877e87c 100644 --- a/examples/list-objects-v2.js +++ b/examples/list-objects-v2.js @@ -14,18 +14,18 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are - // dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are +// dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) // List all object paths in bucket my-bucketname. -var objectsStream = s3Client.listObjectsV2('my-bucketname', '', true,'') +const objectsStream = s3Client.listObjectsV2('my-bucketname', '', true, '') objectsStream.on('data', function(obj) { console.log(obj) }) diff --git a/examples/list-objects.js b/examples/list-objects.js index 57c17e1b..9044aa59 100644 --- a/examples/list-objects.js +++ b/examples/list-objects.js @@ -17,15 +17,15 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) // List all object paths in bucket my-bucketname. -var objectsStream = s3Client.listObjects('my-bucketname', '', true) +const objectsStream = s3Client.listObjects('my-bucketname', '', true) objectsStream.on('data', function(obj) { console.log(obj) }) @@ -35,7 +35,7 @@ objectsStream.on('error', function(e) { // List all object versions in bucket my-bucketname. -var objectsStreamWithVersions = s3Client.listObjects('my-bucketname', '', true, {IncludeVersion:true}) +const objectsStreamWithVersions = s3Client.listObjects('my-bucketname', '', true, {IncludeVersion:true}) objectsStreamWithVersions.on('data', function(obj) { console.log(obj) }) @@ -45,20 +45,20 @@ objectsStreamWithVersions.on('error', function(e) { // Example to list only the prefixes of a bucket. -//Non versioned bucket with Prefix listing. +// Non versioned bucket with Prefix listing. function listPrefixesOfABucket(buckName) { - var objectsStream=s3Client.listObjects(buckName, '', false , {}) - var counter = 0 + const objectsStream=s3Client.listObjects(buckName, '', false, {}) + let counter = 0 objectsStream.on('data', function (obj) { - if(obj.prefix) { + if (obj.prefix) { counter += 1 } }) - objectsStream.on('end',()=>{ - console.log("Non Versioned Prefix Count:", counter) + objectsStream.on('end', ()=>{ + console.log('Non Versioned Prefix Count:', counter) }) objectsStream.on('error', function (e) { - console.log("::Error:",e) + console.log('::Error:', e) }) } diff --git a/examples/make-bucket.js b/examples/make-bucket.js index a610b250..14e5bc81 100644 --- a/examples/make-bucket.js +++ b/examples/make-bucket.js @@ -17,9 +17,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -29,7 +29,7 @@ s3Client.makeBucket('my-bucketname', 'us-west-1', function(e) { if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) // Create a bucket with object locking enabled. diff --git a/examples/minio/listen-bucket-notification.js b/examples/minio/listen-bucket-notification.js index 7d09bba8..b883e656 100644 --- a/examples/minio/listen-bucket-notification.js +++ b/examples/minio/listen-bucket-notification.js @@ -19,14 +19,14 @@ const Minio = require('../') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: '...', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) // Start listening for notifications on the bucket, using our arn. -let poller = s3Client.listenBucketNotification('bucket1', 'photos/', '.jpg', ['s3:ObjectCreated:*']) +const poller = s3Client.listenBucketNotification('bucket1', 'photos/', '.jpg', ['s3:ObjectCreated:*']) // Notification will be emitted every time a new notification is received. // For object creation, here is a sample record: @@ -47,15 +47,15 @@ let poller = s3Client.listenBucketNotification('bucket1', 'photos/', '.jpg', ['s // arn: 'arn:aws:s3:::bucket1' }, // object: { key: 'photos%2Fobject.jpg', size: 10, sequencer: '...' } } } poller.on('notification', record => { - console.log('New object: %s/%s (size: %d)', record.s3.bucket.name, - record.s3.object.key, record.s3.object.size) + console.log('New object: %s/%s (size: %d)', record.s3.bucket.name, + record.s3.object.key, record.s3.object.size) - // Now that we've received our notification, we can cancel the listener. - // We could leave it open if we wanted to continue to receive notifications. - poller.stop() + // Now that we've received our notification, we can cancel the listener. + // We could leave it open if we wanted to continue to receive notifications. + poller.stop() }) // Create an object - this should trigger a notification. s3Client.putObject('bucket1', 'file.jpg', 'stringdata', (err, etag) => { - if (err) throw err + if (err) throw err }) diff --git a/examples/presigned-getobject-request-date.js b/examples/presigned-getobject-request-date.js index 82dd818c..2c5f7cf8 100644 --- a/examples/presigned-getobject-request-date.js +++ b/examples/presigned-getobject-request-date.js @@ -17,9 +17,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-objectname // are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY', @@ -27,17 +27,17 @@ var s3Client = new Minio.Client({ }) // Presigned get object URL for my-objectname at my-bucketname, it expires in 7 days by default. -var requestDate = new Date() -requestDate.setHours(0,0,0,0) +const requestDate = new Date() +requestDate.setHours(0, 0, 0, 0) -requestDate.setHours(0,0,0,0) +requestDate.setHours(0, 0, 0, 0) s3Client.presignedGetObject('my-bucketname', 'my-objectname', 1000, {}, requestDate, function(e, presignedUrl) { if (e) return console.log(e) console.log(presignedUrl) }) // Versioning support -s3Client.presignedGetObject('my-bucketname', 'my-objectname', 1000, {versionId:"10fa9946-3f64-4137-a58f-888065c0732e"},requestDate, function(e, presignedUrl) { +s3Client.presignedGetObject('my-bucketname', 'my-objectname', 1000, {versionId:'10fa9946-3f64-4137-a58f-888065c0732e'}, requestDate, function(e, presignedUrl) { if (e) return console.log(e) console.log(presignedUrl) }) \ No newline at end of file diff --git a/examples/presigned-getobject.js b/examples/presigned-getobject.js index 4eca964e..bb83b1d2 100644 --- a/examples/presigned-getobject.js +++ b/examples/presigned-getobject.js @@ -14,12 +14,12 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-objectname - // are dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-objectname +// are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY', @@ -27,7 +27,7 @@ var s3Client = new Minio.Client({ }) // Presigned get object URL for my-objectname at my-bucketname, it expires in 7 days by default. -var presignedUrl = s3Client.presignedGetObject('my-bucketname', 'my-objectname', 1000, function(e, presignedUrl) { +const presignedUrl = s3Client.presignedGetObject('my-bucketname', 'my-objectname', 1000, function(e, presignedUrl) { if (e) return console.log(e) console.log(presignedUrl) }) diff --git a/examples/presigned-postpolicy.js b/examples/presigned-postpolicy.js index 7e56df4b..4161641d 100644 --- a/examples/presigned-postpolicy.js +++ b/examples/presigned-postpolicy.js @@ -14,12 +14,12 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-objectname and my-bucketname - // are dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-objectname and my-bucketname +// are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY', @@ -27,14 +27,14 @@ var s3Client = new Minio.Client({ }) // Construct a new postPolicy. -var policy = s3Client.newPostPolicy() +const policy = s3Client.newPostPolicy() // Set the object name my-objectname. -policy.setKey("my-objectname") +policy.setKey('my-objectname') // Set the bucket to my-bucketname. -policy.setBucket("my-bucketname") +policy.setBucket('my-bucketname') -var expires = new Date -expires.setSeconds(24 * 60 * 60 * 10) //10 days +const expires = new Date +expires.setSeconds(24 * 60 * 60 * 10) // 10 days policy.setExpires(expires) policy.setContentLengthRange(1024, 1024*1024) // Min upload length is 1KB Max upload size is 1MB @@ -49,11 +49,11 @@ policy.setUserMetaData({ s3Client.presignedPostPolicy(policy, function(e, data) { if (e) return console.log(e) - var curl = [] + const curl = [] curl.push(`curl ${data.postURL}`) - for (var key in data.formData) { + for (const key in data.formData) { if (data.formData.hasOwnProperty(key)) { - var value = data.formData[key] + const value = data.formData[key] curl.push(`-F ${key}=${value}`) } } diff --git a/examples/presigned-putobject.js b/examples/presigned-putobject.js index 9e6a7794..6d9f193a 100644 --- a/examples/presigned-putobject.js +++ b/examples/presigned-putobject.js @@ -14,19 +14,19 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-objectname - // are dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-objectname +// are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY', useSSL: true // Default is true. }) -var presignedUrl = s3Client.presignedPutObject('my-bucketname', 'my-objectname', 1000, function(e, presignedUrl) { +const presignedUrl = s3Client.presignedPutObject('my-bucketname', 'my-objectname', 1000, function(e, presignedUrl) { if (e) return console.log(e) console.log(presignedUrl) }) diff --git a/examples/put-object-retention.js b/examples/put-object-retention.js index f8d47350..e407b54c 100644 --- a/examples/put-object-retention.js +++ b/examples/put-object-retention.js @@ -17,9 +17,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -27,17 +27,17 @@ var s3Client = new Minio.Client({ const bucketName = 'my-bucket' -const objectName ="my-object" +const objectName ='my-object' const expirationDate = new Date() expirationDate.setDate(expirationDate.getDate() + 1) -expirationDate.setUTCHours(0,0,0,0)//Should be start of the day.(midnight) -const versionId ="my-versionId" +expirationDate.setUTCHours(0, 0, 0, 0)// Should be start of the day.(midnight) +const versionId ='my-versionId' -const objRetPromise = s3Client.putObjectRetention(bucketName, objectName, { mode:"GOVERNANCE", retainUntilDate:expirationDate.toISOString(), versionId:versionId} ) +const objRetPromise = s3Client.putObjectRetention(bucketName, objectName, { mode:'GOVERNANCE', retainUntilDate:expirationDate.toISOString(), versionId:versionId} ) objRetPromise.then(() => { - console.log("Success") + console.log('Success') }) .catch((e)=>{ - console.log(" Error",e) + console.log(' Error', e) }) \ No newline at end of file diff --git a/examples/put-object.js b/examples/put-object.js index bfbc516b..d720eccd 100644 --- a/examples/put-object.js +++ b/examples/put-object.js @@ -14,22 +14,22 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-testfile, my-bucketname - // and my-objectname are dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-testfile, my-bucketname +// and my-objectname are dummy values, please replace them with original values. -var Minio = require('minio') -var Fs = require('fs') +const Minio = require('minio') +const Fs = require('fs') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) // Upload a stream -var file = 'my-testfile.ogg' -var fileStream = Fs.createReadStream(file) -var fileStat = Fs.stat(file, function(e, stat) { +const file = 'my-testfile.ogg' +const fileStream = Fs.createReadStream(file) +const fileStat = Fs.stat(file, function(e, stat) { if (e) { return console.log(e) } @@ -37,27 +37,27 @@ var fileStat = Fs.stat(file, function(e, stat) { if (e) { return console.log(e) } - console.log("Successfully uploaded the stream") + console.log('Successfully uploaded the stream') }) }) // Upload a buffer -var buf = new Buffer(10) +const buf = new Buffer(10) buf.fill('a') s3Client.putObject('my-bucketname', 'my-objectname2', buf, 'application/octet-stream', function(e) { if (e) { return console.log(e) } - console.log("Successfully uploaded the buffer") + console.log('Successfully uploaded the buffer') }) // Upload a string -var str = "random string to be uploaded" +const str = 'random string to be uploaded' s3Client.putObject('my-bucketname', 'my-objectname3', str, 'text/plain', function(e) { if (e) { return console.log(e) } - console.log("Successfully uploaded the string") + console.log('Successfully uploaded the string') }) // Upload a Buffer without content-type (default: 'application/octet-stream') @@ -65,5 +65,5 @@ s3Client.putObject('my-bucketname', 'my-objectname4', buf, function(e) { if (e) { return console.log(e) } - console.log("Successfully uploaded the Buffer") + console.log('Successfully uploaded the Buffer') }) diff --git a/examples/remove-all-bucket-notification.js b/examples/remove-all-bucket-notification.js index 01438f8a..dc5c25cf 100644 --- a/examples/remove-all-bucket-notification.js +++ b/examples/remove-all-bucket-notification.js @@ -14,13 +14,13 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are - // dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are +// dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -30,6 +30,6 @@ s3Client.removeAllBucketNotification('my-bucketname', function(e) { if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) diff --git a/examples/remove-bucket-encryption.js b/examples/remove-bucket-encryption.js index 71902152..509c0304 100644 --- a/examples/remove-bucket-encryption.js +++ b/examples/remove-bucket-encryption.js @@ -18,17 +18,17 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.removeBucketEncryption("my-bucket", function (error){ +s3Client.removeBucketEncryption('my-bucket', function (error) { if (error) { return console.log(error) } - console.log("Success") + console.log('Success') }) \ No newline at end of file diff --git a/examples/remove-bucket-lifecycle.js b/examples/remove-bucket-lifecycle.js index 0935496b..1c6422e7 100644 --- a/examples/remove-bucket-lifecycle.js +++ b/examples/remove-bucket-lifecycle.js @@ -17,9 +17,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -30,6 +30,6 @@ s3Client.removeBucketLifecycle('bucketname', function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) diff --git a/examples/remove-bucket-replication.js b/examples/remove-bucket-replication.js index c22baf90..a3f93ed3 100644 --- a/examples/remove-bucket-replication.js +++ b/examples/remove-bucket-replication.js @@ -17,17 +17,17 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.removeBucketReplication('bucketname', function (err){ +s3Client.removeBucketReplication('bucketname', function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) diff --git a/examples/remove-bucket-tagging.js b/examples/remove-bucket-tagging.js index ca7a16e9..6232ae6b 100644 --- a/examples/remove-bucket-tagging.js +++ b/examples/remove-bucket-tagging.js @@ -18,17 +18,17 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.removeBucketTagging('bucketname', function (err){ +s3Client.removeBucketTagging('bucketname', function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) \ No newline at end of file diff --git a/examples/remove-bucket.js b/examples/remove-bucket.js index 8f3a0672..99c39591 100644 --- a/examples/remove-bucket.js +++ b/examples/remove-bucket.js @@ -14,12 +14,12 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname - // are dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname +// are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -31,5 +31,5 @@ s3Client.removeBucket('my-bucketname', function(e) { if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) diff --git a/examples/remove-incomplete-upload.js b/examples/remove-incomplete-upload.js index df09b822..f5355e65 100644 --- a/examples/remove-incomplete-upload.js +++ b/examples/remove-incomplete-upload.js @@ -15,12 +15,12 @@ */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and - // my-objectname are dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and +// my-objectname are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -30,5 +30,5 @@ s3Client.removeIncompleteUpload('my-bucketname', 'my-objectname', function(e) { if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) diff --git a/examples/remove-object-tagging.js b/examples/remove-object-tagging.js index 9d8cfdec..78106e66 100644 --- a/examples/remove-object-tagging.js +++ b/examples/remove-object-tagging.js @@ -18,25 +18,25 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -s3Client.removeObjectTagging('bucketname', "object-name", function (err){ +s3Client.removeObjectTagging('bucketname', 'object-name', function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) -//remove tags on a version of an object -s3Client.removeObjectTagging('bucketname', 'object-name', { versionId: "my-object-version-id" }, function (err){ +// remove tags on a version of an object +s3Client.removeObjectTagging('bucketname', 'object-name', { versionId: 'my-object-version-id' }, function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) \ No newline at end of file diff --git a/examples/remove-object.js b/examples/remove-object.js index c868e8db..34eb7400 100644 --- a/examples/remove-object.js +++ b/examples/remove-object.js @@ -18,9 +18,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and // my-objectname are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -30,23 +30,23 @@ s3Client.removeObject('my-bucketname', 'my-objectname', function(e) { if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) // Remove an object with name 'my-objectname' and a versionId. -s3Client.removeObject('my-bucketname', 'my-objectname', {versionId:"my-versionId"}, function(e) { +s3Client.removeObject('my-bucketname', 'my-objectname', {versionId:'my-versionId'}, function(e) { if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) // Remove an object with name 'my-objectname' and a versionId with object renetion override with governanceBypass:true. -s3Client.removeObject('my-bucketname', 'my-objectname', {versionId:"my-versionId", governanceBypass:true}, function(e) { +s3Client.removeObject('my-bucketname', 'my-objectname', {versionId:'my-versionId', governanceBypass:true}, function(e) { if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) // force delete object/prefix @@ -54,5 +54,5 @@ s3Client.removeObject('force-del-test', 'test/', {forceDelete:true}, function(e) if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) \ No newline at end of file diff --git a/examples/remove-objects.js b/examples/remove-objects.js index e45dd575..2665b87f 100644 --- a/examples/remove-objects.js +++ b/examples/remove-objects.js @@ -18,9 +18,9 @@ // replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', port: 9000, useSSL: false, @@ -37,7 +37,7 @@ const recursive = false function removeObjects (bucketName, prefix, recursive, includeVersion) { // List all object paths in bucket - var objectsStream = s3Client.listObjects(bucketName, prefix, recursive, {IncludeVersion: includeVersion}) + const objectsStream = s3Client.listObjects(bucketName, prefix, recursive, {IncludeVersion: includeVersion}) objectsStream.on('data', function (obj) { if (includeVersion) { @@ -56,7 +56,7 @@ function removeObjects (bucketName, prefix, recursive, includeVersion) { if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) }) } @@ -70,15 +70,15 @@ function removeObjectsMultipleVersions() { const deleteList = [ {versionId: '03ed08e1-34ff-4465-91ed-ba50c1e80f39', name: 'prefix-1/out.json.gz'}, - {versionId: "35517ae1-18cb-4a21-9551-867f53a10cfe", name:"dir1/dir2/test.pdf"}, - {versionId: "3053f564-9aea-4a59-88f0-7f25d6320a2c", name:"dir1/dir2/test.pdf"} + {versionId: '35517ae1-18cb-4a21-9551-867f53a10cfe', name:'dir1/dir2/test.pdf'}, + {versionId: '3053f564-9aea-4a59-88f0-7f25d6320a2c', name:'dir1/dir2/test.pdf'} ] - s3Client.removeObjects("my-bucket", deleteList, function (e) { + s3Client.removeObjects('my-bucket', deleteList, function (e) { if (e) { return console.log(e) } - console.log("Successfully deleted..") + console.log('Successfully deleted..') }) } removeObjectsMultipleVersions() \ No newline at end of file diff --git a/examples/reset-object-lock-config.js b/examples/reset-object-lock-config.js index b820a9a0..af282af7 100644 --- a/examples/reset-object-lock-config.js +++ b/examples/reset-object-lock-config.js @@ -17,18 +17,18 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -//Example to reset/remove object lock config. -s3Client.setObjectLockConfig('my-bucketname', {}, function (err){ +// Example to reset/remove object lock config. +s3Client.setObjectLockConfig('my-bucketname', {}, function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) diff --git a/examples/select-object-content.js b/examples/select-object-content.js index 25530542..b451c34b 100644 --- a/examples/select-object-content.js +++ b/examples/select-object-content.js @@ -18,9 +18,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname // and my-objectname are dummy values, please replace them with original values. -var Minio = require("../dist/main/minio") +const Minio = require('../dist/main/minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -29,16 +29,16 @@ var s3Client = new Minio.Client({ // Reference: https://aws.amazon.com/blogs/storage/querying-data-without-servers-or-databases-using-amazon-s3-select/ const selectRequestConfig = { // expression:"SELECT * FROM s3object s where s.\"Name\" = 'Jane'", - expression:"SELECT * FROM s3object s", - expressionType:"SQL", - inputSerialization : {'CSV': {"FileHeaderInfo": "Use", - RecordDelimiter: "\n", - FieldDelimiter: ",", + expression:'SELECT * FROM s3object s', + expressionType:'SQL', + inputSerialization : {'CSV': {'FileHeaderInfo': 'Use', + RecordDelimiter: '\n', + FieldDelimiter: ',' }, 'CompressionType': 'NONE'}, - outputSerialization : {'CSV': {RecordDelimiter: "\n", - FieldDelimiter: ",",}}, - requestProgress:{Enabled:true}, + outputSerialization : {'CSV': {RecordDelimiter: '\n', + FieldDelimiter: ','}}, + requestProgress:{Enabled:true} // scanRange:{ start:50, end:100 } } diff --git a/examples/set-accelerate-end-point.js b/examples/set-accelerate-end-point.js index 2d41d83e..f8a970d0 100644 --- a/examples/set-accelerate-end-point.js +++ b/examples/set-accelerate-end-point.js @@ -18,24 +18,24 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname // and my-objectname are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) // Enable S3 transfer accelerate endpoint. -s3Client.SetS3TransferAccelerate("s3-accelerate.amazonaws.com") +s3Client.SetS3TransferAccelerate('s3-accelerate.amazonaws.com') // Upload a buffer -var buf = new Buffer(10) +const buf = new Buffer(10) buf.fill('a') s3Client.putObject('my-bucketname', 'my-objectname2', buf, 'application/octet-stream', function(e) { if (e) { return console.log(e.message) } - console.log("Success") + console.log('Success') }) diff --git a/examples/set-bucket-encryption.js b/examples/set-bucket-encryption.js index 94e5c22b..2bd52480 100644 --- a/examples/set-bucket-encryption.js +++ b/examples/set-bucket-encryption.js @@ -18,46 +18,46 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -//Apply default encryption. -s3Client.setBucketEncryption("my-bucket", function (error){ +// Apply default encryption. +s3Client.setBucketEncryption('my-bucket', function (error) { if (error) { return console.log(error) } - console.log("Success") + console.log('Success') }) -//Set Encryption Rule. Only one rule is allowed. +// Set Encryption Rule. Only one rule is allowed. /** * The following rule is not supported. * ` { ApplyServerSideEncryptionByDefault: { KMSMasterKeyID: 'arn:aws:kms:us-east-1:1234/5678example', SSEAlgorithm: "aws:kms" } }` */ -var encryptionConfig = { +const encryptionConfig = { Rule:[ { ApplyServerSideEncryptionByDefault: { - SSEAlgorithm:"AES256" + SSEAlgorithm:'AES256' } } ] } -s3Client.setBucketEncryption("my-bucket", encryptionConfig, function (error){ +s3Client.setBucketEncryption('my-bucket', encryptionConfig, function (error) { if (error) { return console.log(error) } - console.log("Success") + console.log('Success') }) @@ -93,16 +93,16 @@ const kmsIdEncryptionConfig = { Rule:[ { ApplyServerSideEncryptionByDefault: { - KMSMasterKeyID:'my-minio-key', //as per env value - SSEAlgorithm:"aws:kms" // this is important + KMSMasterKeyID:'my-minio-key', // as per env value + SSEAlgorithm:'aws:kms' // this is important } } ] } -s3Client.setBucketEncryption("my-bucket", kmsIdEncryptionConfig, function (error){ +s3Client.setBucketEncryption('my-bucket', kmsIdEncryptionConfig, function (error) { if (error) { return console.log(error) } - console.log("Success") + console.log('Success') }) \ No newline at end of file diff --git a/examples/set-bucket-lifecycle.js b/examples/set-bucket-lifecycle.js index a7af5788..72e2ca92 100644 --- a/examples/set-bucket-lifecycle.js +++ b/examples/set-bucket-lifecycle.js @@ -17,9 +17,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -28,48 +28,48 @@ var s3Client = new Minio.Client({ const lifecycleConfig= { Rule: [{ - "ID": "Expiration Days Rule", - "Status": "Enabled", - "Filter": { - "Prefix":"", + 'ID': 'Expiration Days Rule', + 'Status': 'Enabled', + 'Filter': { + 'Prefix':'' }, - "Expiration": { - "Days": "3650" + 'Expiration': { + 'Days': '3650' } } ] } -s3Client.setBucketLifecycle('bucketname',lifecycleConfig, function (err) { +s3Client.setBucketLifecycle('bucketname', lifecycleConfig, function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) -//Example to demonstrate Expiration Date +// Example to demonstrate Expiration Date const expirationDate = new Date() expirationDate.setDate(expirationDate.getDate() + 1) // Expire next day. -expirationDate.setUTCHours(0,0,0,0)//Should be start of the day.(midnight) +expirationDate.setUTCHours(0, 0, 0, 0)// Should be start of the day.(midnight) const lifecycleConfigWithExpirationDate= { Rule: [{ - "ID": "Expiration Date Rule", - "Status": "Enabled", - "Filter": { - "Prefix":"", + 'ID': 'Expiration Date Rule', + 'Status': 'Enabled', + 'Filter': { + 'Prefix':'' }, - "Expiration": { + 'Expiration': { Date:expirationDate.toISOString() } } ] } -s3Client.setBucketLifecycle('bucketname',lifecycleConfigWithExpirationDate, function (err) { +s3Client.setBucketLifecycle('bucketname', lifecycleConfigWithExpirationDate, function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) diff --git a/examples/set-bucket-notification.js b/examples/set-bucket-notification.js index bd81ec05..437b4eef 100644 --- a/examples/set-bucket-notification.js +++ b/examples/set-bucket-notification.js @@ -14,13 +14,13 @@ * limitations under the License. */ - // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are - // dummy values, please replace them with original values. +// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are +// dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 'localhost', port: 9000, useSSL: false, @@ -28,9 +28,9 @@ var s3Client = new Minio.Client({ secretKey: 'YOUR-SECRETACCESSKEY' }) -var config = new Minio.NotificationConfig() -var arn = Minio.buildARN('minio', 'sqs', '','1', 'webhook') -var queue = new Minio.QueueConfig(arn) +const config = new Minio.NotificationConfig() +const arn = Minio.buildARN('minio', 'sqs', '', '1', 'webhook') +const queue = new Minio.QueueConfig(arn) queue.addFilterSuffix('.jpg') queue.addFilterPrefix('myphotos/') @@ -42,6 +42,6 @@ s3Client.setBucketNotification('my-bucketname', config, function(e) { if (e) { return console.log(e) } - console.log("Success") + console.log('Success') }) diff --git a/examples/set-bucket-policy.js b/examples/set-bucket-policy.js index ae97c92a..1e28f58e 100644 --- a/examples/set-bucket-policy.js +++ b/examples/set-bucket-policy.js @@ -17,16 +17,16 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, and my-bucketname // are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) // Bucket policy - GET requests on "testbucket" bucket will not need authentication. -var policy = ` +const policy = ` { "Version": "2012-10-17", "Statement": [ @@ -66,7 +66,7 @@ var policy = ` ` s3Client.setBucketPolicy('testbucket', policy, (err) => { - if (err) throw err + if (err) throw err - console.log('Set bucket policy') + console.log('Set bucket policy') }) diff --git a/examples/set-bucket-replication.js b/examples/set-bucket-replication.js index 5268d7a9..ac901d4b 100644 --- a/examples/set-bucket-replication.js +++ b/examples/set-bucket-replication.js @@ -17,38 +17,38 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -const arnFromMcCli = "arn:minio:replication::1277fcbe7df0bab76ab0c64cf7c45a0d27e01917ee5f11e913f3478417833660:destination" +const arnFromMcCli = 'arn:minio:replication::1277fcbe7df0bab76ab0c64cf7c45a0d27e01917ee5f11e913f3478417833660:destination' -var replicationConfig = { +const replicationConfig = { role:arnFromMcCli, rules:[{ - "DeleteMarkerReplication": { - "Status": "Disabled" + 'DeleteMarkerReplication': { + 'Status': 'Disabled' }, - "DeleteReplication": { - "Status": [ + 'DeleteReplication': { + 'Status': [ ] }, - "Destination": { - "Bucket": "arn:aws:s3:::destination" + 'Destination': { + 'Bucket': 'arn:aws:s3:::destination' }, - "Priority": "1", - "Status": "Enabled" + 'Priority': '1', + 'Status': 'Enabled' }] } -s3Client.setBucketReplication('bucketname',replicationConfig, function (err){ +s3Client.setBucketReplication('bucketname', replicationConfig, function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) diff --git a/examples/set-bucket-tagging.js b/examples/set-bucket-tagging.js index 6acbfcc1..17046524 100644 --- a/examples/set-bucket-tagging.js +++ b/examples/set-bucket-tagging.js @@ -18,19 +18,19 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -var tagsMap = {"tagkey":"tagvalue"} +const tagsMap = {'tagkey':'tagvalue'} -s3Client.setBucketTagging('bucketname', tagsMap, function (err){ +s3Client.setBucketTagging('bucketname', tagsMap, function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) \ No newline at end of file diff --git a/examples/set-bucket-versioning.js b/examples/set-bucket-versioning.js index 90fee452..c92017bc 100644 --- a/examples/set-bucket-versioning.js +++ b/examples/set-bucket-versioning.js @@ -18,19 +18,19 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -var versioningStateConfig = {Status:"Enabled"} +const versioningStateConfig = {Status:'Enabled'} -s3Client.setBucketVersioning("my-bucket", versioningStateConfig, function (error){ +s3Client.setBucketVersioning('my-bucket', versioningStateConfig, function (error) { if (error) { return console.log(error) } - console.log("Success") + console.log('Success') }) \ No newline at end of file diff --git a/examples/set-object-legal-hold.js b/examples/set-object-legal-hold.js index 0320639c..b919ce84 100644 --- a/examples/set-object-legal-hold.js +++ b/examples/set-object-legal-hold.js @@ -17,24 +17,24 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -//Set legal hold config of an object. -s3Client.setObjectLegalHold('bucketName', 'objectName', {status:"ON"}, function(err, res) { +// Set legal hold config of an object. +s3Client.setObjectLegalHold('bucketName', 'objectName', {status:'ON'}, function(err, res) { if (err) { return console.log('Unable to set legal hold config for the object', err) } console.log('Success') }) -//Set legal hold config of an object with versionId. -s3Client.setObjectLegalHold('bucketName', 'objectName', { status:"ON", versionId:'my-obj-version-uuid' }, function(err, res) { +// Set legal hold config of an object with versionId. +s3Client.setObjectLegalHold('bucketName', 'objectName', { status:'ON', versionId:'my-obj-version-uuid' }, function(err, res) { if (err) { return console.log('Unable to set legal hold config for the object version', err) } diff --git a/examples/set-object-lock-config.js b/examples/set-object-lock-config.js index 4d90bb86..b59fda62 100644 --- a/examples/set-object-lock-config.js +++ b/examples/set-object-lock-config.js @@ -17,26 +17,26 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -//Set Object lock on a bucket -s3Client.setObjectLockConfig('my-bucketname', {mode:"COMPLIANCE",unit:'Days', validity:10 }, function (err){ +// Set Object lock on a bucket +s3Client.setObjectLockConfig('my-bucketname', {mode:'COMPLIANCE', unit:'Days', validity:10 }, function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) -//To reset/remove object lock config. -s3Client.setObjectLockConfig('my-bucketname', {}, function (err){ +// To reset/remove object lock config. +s3Client.setObjectLockConfig('my-bucketname', {}, function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) diff --git a/examples/set-object-tagging.js b/examples/set-object-tagging.js index 8a1e11d4..b1393126 100644 --- a/examples/set-object-tagging.js +++ b/examples/set-object-tagging.js @@ -18,27 +18,27 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' }) -var tagsMap = {"tagkey":"tagvalue"} +const tagsMap = {'tagkey':'tagvalue'} -s3Client.setObjectTagging('bucketname', "object-name", tagsMap, function (err){ +s3Client.setObjectTagging('bucketname', 'object-name', tagsMap, function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) -//Put tags on a version of an object -s3Client.setObjectTagging('bucketname', "object-name", tagsMap, { versionId: "my-version-id" }, function (err){ +// Put tags on a version of an object +s3Client.setObjectTagging('bucketname', 'object-name', tagsMap, { versionId: 'my-version-id' }, function (err) { if (err) { return console.log(err) } - console.log("Success") + console.log('Success') }) \ No newline at end of file diff --git a/examples/stat-object.js b/examples/stat-object.js index 3c46543d..a67b96ba 100644 --- a/examples/stat-object.js +++ b/examples/stat-object.js @@ -18,9 +18,9 @@ // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname // and my-objectname are dummy values, please replace them with original values. -var Minio = require('minio') +const Minio = require('minio') -var s3Client = new Minio.Client({ +const s3Client = new Minio.Client({ endPoint: 's3.amazonaws.com', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY' @@ -34,8 +34,8 @@ s3Client.statObject('my-bucketname', 'my-objectname', function(e, stat) { }) // Get stat information for a specific version of 'my-objectname' -//Bucket must be versioning enabled. -s3Client.statObject('my-bucketname', 'my-objectname', {versionId:"my-uuid"},function(e, stat) { +// Bucket must be versioning enabled. +s3Client.statObject('my-bucketname', 'my-objectname', {versionId:'my-uuid'}, function(e, stat) { if (e) { return console.log(e) } diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 29ac0063..00000000 --- a/gulpfile.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - * MinIO Javascript Library for Amazon S3 Compatible Cloud Storage, (C) 2015 MinIO, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const babel = require('gulp-babel') -const gulp = require('gulp') -const gulpIf = require('gulp-if') -const sourcemaps = require('gulp-sourcemaps') - -const fs = require('fs') -const browserify = require('browserify') -const mocha = require('gulp-mocha') -const eslint = require('gulp-eslint') - -const compileJS = (src, dest) => { - return gulp.src(src) - .pipe(sourcemaps.init()) - .pipe(babel({ - presets: [['@babel/env', { - targets: { node: 8 } - }]] - })) - .pipe(sourcemaps.write('.')) - .pipe(gulp.dest(dest)) -} - -const compile = () => compileJS('src/main/**/*.js', 'dist/main') -const testCompile = gulp.series(compile, () => { - return compileJS('src/test/**/*.js', 'dist/test') -}) - -exports.browserify = gulp.series(compile, () => { - return browserify('./dist/main/minio.js', { - standalone: 'MinIO' - }) - .bundle() - .on('error', (err) => { - // eslint-disable-next-line no-console - console.log('Error : ' + err.message) - }) - .pipe(fs.createWriteStream('./dist/main/minio-browser.js')) -}) - -exports.test = gulp.series(testCompile, () => { - return gulp.src('dist/test/**/*.js', { - read: false - }).pipe(mocha({ - exit: true, - reporter: 'spec', - ui: 'bdd', - })) -}) - -function isFixed(file) { - return file.eslint != null && file.eslint.fixed -} - -exports.lint = () => { - const hasFixFlag = process.argv.slice(2).includes('--fix') - return gulp.src(['src/**/*.js', 'gulpfile.js']) - .pipe(eslint({fix: hasFixFlag})) - .pipe(eslint.format()) - .pipe(eslint.failAfterError()) - // if fixed, write the file to dest - .pipe(gulpIf(isFixed, gulp.dest('src/'))) -} - -exports.functionalTest = gulp.series(testCompile, () => { - return gulp.src('dist/test/functional/*.js', { - read: false - }).pipe(mocha({ - exit: true, - reporter: 'spec', - ui: 'bdd', - })) -}) - -exports.compile = compile -exports.testCompile = testCompile -exports.default = gulp.series(exports.test, exports.browserify) diff --git a/package-lock.json b/package-lock.json index 91673bd0..1e542f2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5307 +1,5607 @@ { "name": "minio", "version": "7.0.33", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "dev": true - }, - "@babel/core": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", - "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helpers": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "packages": { + "": { + "name": "minio", + "version": "7.0.33", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.1.0", + "block-stream2": "^2.0.0", + "buffer-crc32": "^0.2.13", + "crypto-browserify": "^3.12.0", + "es6-error": "^4.1.1", + "fast-xml-parser": "^3.17.5", + "ipaddr.js": "^2.0.1", + "json-stream": "^1.0.0", + "lodash": "^4.17.21", + "mime-types": "^2.1.14", + "mkdirp": "^0.5.1", + "query-string": "^7.1.1", + "through2": "^3.0.1", + "web-encoding": "^1.1.5", + "xml": "^1.0.0", + "xml2js": "^0.4.15" + }, + "devDependencies": { + "@rollup/plugin-terser": "^0.4.0", + "@rollup/plugin-typescript": "^11.0.0", + "@types/node": "^18.15.5", + "@typescript-eslint/eslint-plugin": "^5.56.0", + "@typescript-eslint/parser": "^5.56.0", + "chai": "^4.2.0", + "eslint": "^8.9.0", + "mocha": "^9.2.0", + "mocha-steps": "^1.1.0", + "nock": "^13.2.2", + "rollup": "^2.79.1", + "split-file": "^2.2.2", + "superagent": "^5.1.0", + "tslib": "^2.5.0", + "typescript": "^5.0.2", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">8" } }, - "@babel/generator": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", - "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz", + "integrity": "sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==", "dev": true, - "requires": { - "@babel/types": "^7.18.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz", - "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==", + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.6" + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "@babel/helper-compilation-targets": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", - "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz", - "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-member-expression-to-functions": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6" + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" } }, - "@babel/helper-environment-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", - "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "engines": { + "node": ">=6.0.0" } }, - "@babel/helper-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", - "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.6" + "engines": { + "node": ">=6.0.0" } }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz", - "integrity": "sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==", + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, - "@babel/helper-module-transforms": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz", - "integrity": "sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@babel/types": "^7.18.8" + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "@babel/helper-plugin-utils": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", - "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz", - "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-wrap-function": "^7.18.6", - "@babel/types": "^7.18.6" + "engines": { + "node": ">= 8" } }, - "@babel/helper-replace-supers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz", - "integrity": "sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-member-expression-to-functions": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "node_modules/@rollup/plugin-terser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.0.tgz", + "integrity": "sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.x || ^3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz", - "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==", + "node_modules/@rollup/plugin-typescript": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.0.0.tgz", + "integrity": "sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } } }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "@babel/helper-wrap-function": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz", - "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/helpers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", - "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } + "node_modules/@types/node": { + "version": "18.15.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", + "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==", + "dev": true }, - "@babel/parser": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.8.tgz", - "integrity": "sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==", + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz", + "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/type-utils": "5.56.0", + "@typescript-eslint/utils": "5.56.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz", - "integrity": "sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.6" + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz", - "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "node_modules/@typescript-eslint/parser": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", + "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "dependencies": { + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", + "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "dependencies": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz", - "integrity": "sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz", + "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "dependencies": { + "@typescript-eslint/typescript-estree": "5.56.0", + "@typescript-eslint/utils": "5.56.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "node_modules/@typescript-eslint/types": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz", - "integrity": "sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", + "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "dependencies": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz", - "integrity": "sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.6" - } + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "node_modules/@typescript-eslint/utils": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz", + "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz", - "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==", + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "engines": { + "node": ">=4.0" } }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "node_modules/@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "optional": true }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=8" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=8" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": "*" } }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "node_modules/block-stream2": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", + "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", + "dependencies": { + "readable-stream": "^3.4.0" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, - "@babel/plugin-transform-block-scoping": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz", - "integrity": "sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, - "@babel/plugin-transform-classes": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.8.tgz", - "integrity": "sha512-RySDoXdF6hgHSHuAW4aLGyVQdmvEX/iJtjVre52k0pxRq4hzqze+rAVP++NmNv596brBpYmaiKgTZby7ziBnVg==", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz", - "integrity": "sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, - "@babel/plugin-transform-destructuring": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz", - "integrity": "sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz", - "integrity": "sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" } }, - "@babel/plugin-transform-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz", - "integrity": "sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" } }, - "@babel/plugin-transform-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz", - "integrity": "sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, - "@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz", - "integrity": "sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "engines": { + "node": ">=6" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "engines": { + "node": "*" } }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" } }, - "@babel/plugin-transform-spread": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz", - "integrity": "sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6" + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz", - "integrity": "sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz", - "integrity": "sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz", - "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" } }, - "@babel/preset-env": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.6.tgz", - "integrity": "sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw==", + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, - "requires": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6", - "@babel/plugin-proposal-async-generator-functions": "^7.18.6", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.6", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.6", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.6", - "@babel/plugin-transform-classes": "^7.18.6", - "@babel/plugin-transform-computed-properties": "^7.18.6", - "@babel/plugin-transform-destructuring": "^7.18.6", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.6", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.6", - "@babel/plugin-transform-function-name": "^7.18.6", - "@babel/plugin-transform-literals": "^7.18.6", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.6", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.6", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.6", - "@babel/plugin-transform-typeof-symbol": "^7.18.6", - "@babel/plugin-transform-unicode-escapes": "^7.18.6", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" } }, - "@babel/runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", - "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "engines": { + "node": ">=0.4.0" } }, - "@babel/traverse": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.8.tgz", - "integrity": "sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.8", - "@babel/types": "^7.18.8", - "debug": "^4.1.0", - "globals": "^11.1.0" + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "@babel/types": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.8.tgz", - "integrity": "sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==", + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" + "engines": { + "node": ">=0.3.1" } }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dependencies": { - "globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - } + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "@gulp-sourcemaps/identity-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", - "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "requires": { - "acorn": "^5.0.3", - "css": "^2.2.1", - "normalize-path": "^2.1.1", - "source-map": "^0.6.0", - "through2": "^2.0.3" - }, "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@gulp-sourcemaps/map-sources": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", - "integrity": "sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==", + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "requires": { - "normalize-path": "^2.0.1", - "through2": "^2.0.3" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } + "engines": { + "node": ">=8" } }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, - "@zxing/text-encoding": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "optional": true + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "node_modules/eslint": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" + "engines": { + "node": ">=10" } }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } }, - "ajv": { + "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { + "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==", - "dev": true - }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { - "ansi-wrap": "0.1.0" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "color-convert": "^1.9.0" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "engines": { + "node": ">=10" }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "node_modules/eslint/node_modules/globals": { + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, - "requires": { - "buffer-equal": "^1.0.0" + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "arr-diff": { + "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "make-iterator": "^1.0.0" + "engines": { + "node": ">=8" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "make-iterator": "^1.0.0" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true - }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", + "node_modules/espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "node_modules/espree/node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, - "requires": { - "is-number": "^4.0.0" + "bin": { + "acorn": "bin/acorn" }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "engines": { + "node": ">=0.4.0" } }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "estraverse": "^5.1.0" }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } + "engines": { + "node": ">=0.10" } }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" + "engines": { + "node": ">=4.0" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "requires": { - "async-done": "^1.2.2" + "engines": { + "node": ">=0.10.0" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "node_modules/fast-glob/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "requires": { - "object.assign": "^4.1.0" + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "node_modules/fast-glob/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "node_modules/fast-glob/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "engines": { + "node": ">=0.12.0" } }, - "babelify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", - "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", - "dev": true - }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", + "node_modules/fast-glob/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/fast-glob/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "block-stream2": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", - "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", - "requires": { - "readable-stream": "^3.4.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "node_modules/fast-xml-parser": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", + "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", + "dependencies": { + "strnum": "^1.0.4" + }, + "bin": { + "xml2js": "cli.js" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "dependencies": { + "reusify": "^1.0.4" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "brorand": { + "node_modules/filter-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "engines": { + "node": ">=0.10.0" + } }, - "browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } }, - "browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" - }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "browser-resolve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "node_modules/flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, - "requires": { - "resolve": "^1.17.0" + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "node_modules/formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", + "dev": true, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "browserify": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz", - "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^2.0.0", - "browserify-zlib": "~0.2.0", - "buffer": "~5.2.1", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.0", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^2.0.0", - "glob": "^7.1.0", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.0.0", - "labeled-stream-splicer": "^2.0.0", - "mkdirp-classic": "^0.5.2", - "module-deps": "^6.2.3", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "~0.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^2.0.0", - "stream-http": "^3.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.10.1", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - } - } - } - } + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "browserify-cipher": { + "node_modules/functional-red-black-tree": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true, + "engines": { + "node": "*" } }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "requires": { - "pako": "~1.0.5" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "browserslist": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", - "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001359", - "electron-to-chromium": "^1.4.172", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.4" + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "engines": { + "node": ">=4.x" } }, - "cached-path-relative": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", - "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", - "dev": true + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } }, - "call-bind": { + "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", - "dev": true, - "requires": { - "callsites": "^0.2.0" + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dependencies": { - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", - "dev": true - } + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "callsites": { + "node_modules/hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } }, - "caniuse-lite": { - "version": "1.0.30001364", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001364.tgz", - "integrity": "sha512-9O0xzV3wVyX0SlegIQ6knz+okhBB5pE0PC40MNdwcipjwpxoUEHL24uJ+gG42cgklPjfO5ZjZPme9FTSN3QT2Q==", - "dev": true - }, - "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "bin": { + "he": "bin/he" } }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - } + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "requires": { - "restore-cursor": "^2.0.0" + "engines": { + "node": ">=0.8.19" } }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "once": "^1.3.0", + "wrappy": "1" } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true - }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", - "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "engines": { + "node": ">= 10" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, - "requires": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" + "dependencies": { + "has": "^1.0.3" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", - "dev": true - } + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "requires": { - "delayed-stream": "~1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true - }, - "copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "dev": true, - "requires": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "core-js-compat": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.4.tgz", - "integrity": "sha512-RkSRPe+JYEoflcsuxJWaiMPhnZoFS51FcIxm53k4KzhISCBTmaGlto9dTIrYuk0hnJc3G6pKufAKepHnBq6B6Q==", - "dev": true, - "requires": { - "browserslist": "^4.21.1", - "semver": "7.0.0" - }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "node_modules/is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "dash-ast": { + "node_modules/json-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", + "integrity": "sha512-H/ZGY0nIAg3QcOwE1QN/rK/Fa7gJn7Ii5obwp6zyPO4xiPNwpIMjqy2gwjBEGqzkF/vSWEIBQCBuN19hYiL6Qg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "requires": { - "ms": "2.1.2" + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "debug-fabulous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", - "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "requires": { - "debug": "3.X", - "memoizee": "0.4.X", - "object-assign": "4.X" - }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", "dev": true, - "requires": { - "kind-of": "^5.0.2" - }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "get-func-name": "^2.0.0" } }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "engines": { + "node": ">= 8" } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", - "dev": true + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } }, - "deps-sort": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", - "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "shasum-object": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" + "bin": { + "mime": "cli.js" }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } + "engines": { + "node": ">=4.0.0" } }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" } }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", - "dev": true + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, - "requires": { - "esutils": "^2.0.2" + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "node_modules/mocha-steps": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mocha-steps/-/mocha-steps-1.3.0.tgz", + "integrity": "sha512-KZvpMJTqzLZw3mOb+EEuYi4YZS41C9iTnb7skVFRxHjUd1OYbl64tCMSmpdIRM9LnwIrSOaRfPtNpF5msgv6Eg==", "dev": true }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "engines": { + "node": ">=6" } }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/mocha/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "dependencies": { + "color-convert": "^2.0.1" }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/mocha/node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "node_modules/mocha/node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" + "engines": { + "node": ">=8" } }, - "electron-to-chromium": { - "version": "1.4.185", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.185.tgz", - "integrity": "sha512-9kV/isoOGpKkBt04yYNaSWIBn3187Q5VZRtoReq8oz5NY/A4XmU6cAoqgQlDp7kKJCZMRjWZ8nsQyxfpFHvfyw==", - "dev": true + "node_modules/mocha/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "node_modules/mocha/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/mocha/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/mocha/node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "requires": { - "once": "^1.4.0" + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/mocha/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } + "node_modules/mocha/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "node_modules/mocha/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "node_modules/mocha/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "node_modules/mocha/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "node_modules/mocha/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "eslint": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", - "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "node_modules/mocha/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "node_modules/mocha/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, "dependencies": { - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - } + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/mocha/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "requires": { - "estraverse": "^5.1.0" + "engines": { + "node": ">=8" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/mocha/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "requires": { - "estraverse": "^5.2.0" + "engines": { + "node": ">=0.12.0" } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "node_modules/mocha/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "node_modules/mocha/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" } }, - "events": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", - "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "node_modules/mocha/node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } + "engines": { + "node": ">=8" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "node_modules/mocha/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "dependencies": { + "picomatch": "^2.2.1" }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/mocha/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } + "randombytes": "^2.1.0" } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "node_modules/mocha/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "requires": { - "type": "^2.5.0" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", - "dev": true - } + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "node_modules/mocha/node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "node_modules/mocha/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" + "engines": { + "node": ">=10" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "engines": { + "node": ">=10" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, - "fast-xml-parser": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", - "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", - "requires": { - "strnum": "^1.0.4" + "node_modules/nock": { + "version": "13.2.8", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.8.tgz", + "integrity": "sha512-JT42FrXfQRpfyL4cnbBEJdf4nmBpVP0yoCcSBr+xkT8Q1y3pgtaCKHGAAOIFcEJ3O3t0QbVAmid0S0f2bj3Wpg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" } }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "engines": { + "node": ">=0.10.0" } }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==" + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "flagged-respawn": { + "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "engines": { + "node": ">=0.10.0" } }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "requires": { - "for-in": "^1.0.1" + "engines": { + "node": "*" } }, - "fork-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", - "integrity": "sha512-Pqq5NnT78ehvUnAk/We/Jr22vSvanRlFTpAmQ88xBY/M1TlHe+P0ILuEyXS595ysdGfaj22634LBkGMA2GTcpA==", - "dev": true + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "formidable": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "dev": true + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "dev": true, - "requires": { - "map-cache": "^0.2.2" + "engines": { + "node": ">= 8" } }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.1.tgz", + "integrity": "sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==", "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ] }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/rollup/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "requires": { - "is-glob": "^4.0.3" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" + "dependencies": { + "randombytes": "^2.1.0" } }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "requires": { - "sparkles": "^1.0.0" + "engines": { + "node": ">=8" } }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "node_modules/smob": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/smob/-/smob-0.0.6.tgz", + "integrity": "sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==", "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-file": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/split-file/-/split-file-2.3.0.tgz", + "integrity": "sha512-dc/0SDKvjtSjUI999vkclWQAk5xhD86pKEWWL2ULR6WrHI9/euIEMG/JSUbwbNW8IC+gYLJqynSGHwlOVmSwGA==", + "dev": true, + "dependencies": { + "bluebird": "^3.7.2" }, + "bin": { + "split-file": "split-file-cli.js" + } + }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - } - } + "safe-buffer": "~5.2.0" } }, - "gulp-babel": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-8.0.0.tgz", - "integrity": "sha512-oomaIqDXxFkg7lbpBou/gnUkX51/Y/M2ZfSjL2hdqXTAlSWZcgZtd2o0cOH0r/eE8LWD0+Q/PsLsr2DKOoqToQ==", + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "plugin-error": "^1.0.1", - "replace-ext": "^1.0.0", - "through2": "^2.0.0", - "vinyl-sourcemaps-apply": "^0.2.0" + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/superagent": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.3.1.tgz", + "integrity": "sha512-wjJ/MoTid2/RuGCOFtlacyGNxN9QLMgcpYLDQlWFIhhdJ93kNscFonGvrpAHSCVjRVj++DGCglocF7Aej1KHvQ==", + "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", + "dev": true, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.2", + "debug": "^4.1.1", + "fast-safe-stringify": "^2.0.7", + "form-data": "^3.0.0", + "formidable": "^1.2.2", + "methods": "^1.1.2", + "mime": "^2.4.6", + "qs": "^6.9.4", + "readable-stream": "^3.6.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 7.0.0" } }, - "gulp-eslint": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-4.0.2.tgz", - "integrity": "sha512-fcFUQzFsN6dJ6KZlG+qPOEkqfcevRUXgztkYCvhNvJeSvOicC8ucutN4qR/ID8LmNZx9YPIkBzazTNnVvbh8wg==", + "node_modules/superagent/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { - "eslint": "^4.0.0", - "fancy-log": "^1.3.2", - "plugin-error": "^1.0.0" + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/superagent/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/superagent/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.6.tgz", + "integrity": "sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", + "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "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.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/web-encoding": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", + "dependencies": { + "util": "^0.12.3" + }, + "optionalDependencies": { + "@zxing/text-encoding": "0.9.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==" + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@eslint-community/eslint-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz", + "integrity": "sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", - "dev": true - } - } - }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "globals": { + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "requires": { - "esutils": "^2.0.2" + "type-fest": "^0.20.2" } }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" } - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rollup/plugin-terser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.0.tgz", + "integrity": "sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==", + "dev": true, + "requires": { + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" + } + }, + "@rollup/plugin-typescript": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.0.0.tgz", + "integrity": "sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/node": { + "version": "18.15.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", + "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==", + "dev": true + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz", + "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/type-utils": "5.56.0", + "@typescript-eslint/utils": "5.56.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "yallist": "^4.0.0" } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "lru-cache": "^6.0.0" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + } + } + }, + "@typescript-eslint/parser": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", + "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", + "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz", + "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.56.0", + "@typescript-eslint/utils": "5.56.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", + "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "yallist": "^4.0.0" } }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "lru-cache": "^6.0.0" } }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + } + } + }, + "@typescript-eslint/utils": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz", + "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "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" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "glob": "^7.1.3" + "yallist": "^4.0.0" } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "lru-cache": "^6.0.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true - }, - "strip-ansi": { + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "optional": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "peer": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "block-stream2": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", + "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", + "requires": { + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, - "gulp-if": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-3.0.0.tgz", - "integrity": "sha512-fCUEngzNiEZEK2YuPm+sdMpO6ukb8+/qzbGfJBXyNOXz85bCG7yBI+pPSl+N90d7gnLvMsarthsAImx0qy7BAw==", - "dev": true, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", "requires": { - "gulp-match": "^1.1.0", - "ternary-stream": "^3.0.0", - "through2": "^3.0.1" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" } }, - "gulp-match": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz", - "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==", - "dev": true, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { - "minimatch": "^3.0.3" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "gulp-mocha": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/gulp-mocha/-/gulp-mocha-8.0.0.tgz", - "integrity": "sha512-FdbBydfzszaES/gXfwD6RFq1yJTj4Z6328R1yqsmhf+t7hW2aj9ZD9Hz8boQShjZ9J8/w6tQBM5mePb8K2pbqA==", + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "eslint": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", "dev": true, "requires": { - "dargs": "^7.0.0", - "execa": "^5.0.0", - "mocha": "^8.3.0", - "plugin-error": "^1.0.1", - "supports-color": "^8.1.1", - "through2": "^4.0.2" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "binary-extensions": "^2.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "argparse": "^2.0.1" + "color-convert": "^2.0.1" } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.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": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "color-name": "~1.1.4" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "path-exists": { + "escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "globals": { + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "requires": { - "is-number": "^7.0.0" + "type-fest": "^0.20.2" } }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "has-flag": "^4.0.0" } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + } + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, - "gulp-sourcemaps": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz", - "integrity": "sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==", + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { - "@gulp-sourcemaps/identity-map": "1.X", - "@gulp-sourcemaps/map-sources": "1.X", - "acorn": "5.X", - "convert-source-map": "1.X", - "css": "2.X", - "debug-fabulous": "1.X", - "detect-newline": "2.X", - "graceful-fs": "4.X", - "source-map": "~0.6.0", - "strip-bom-string": "1.X", - "through2": "2.X" + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "dependencies": { "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true + } + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "to-regex-range": "^5.0.1" } }, - "safe-buffer": { + "glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "is-number": "^7.0.0" } } } }, - "gulplog": { + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fast-xml-parser": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", + "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", + "requires": { + "strnum": "^1.0.4" + } + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==" + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { - "glogg": "^1.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" } }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -5310,34 +5610,11 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - } - } - }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, "has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", @@ -5359,38 +5636,6 @@ "has-symbols": "^1.0.2" } }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -5408,72 +5653,24 @@ "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", - "dev": true - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true + } }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -5511,136 +5708,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", - "dev": true, - "requires": { - "source-map": "~0.5.3" - } - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "insert-module-globals": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", - "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -5651,53 +5718,11 @@ "side-channel": "^1.0.4" } }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true - }, "ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -5707,12 +5732,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -5721,15 +5740,6 @@ "has-bigints": "^1.0.1" } }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -5739,12 +5749,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -5759,26 +5763,6 @@ "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -5787,46 +5771,12 @@ "has-tostringtag": "^1.0.0" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -5844,37 +5794,11 @@ "is-extglob": "^2.1.1" } }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", - "dev": true - }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", @@ -5889,21 +5813,6 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -5913,21 +5822,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -5936,12 +5830,6 @@ "call-bind": "^1.0.2" } }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -5970,33 +5858,12 @@ "has-tostringtag": "^1.0.0" } }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "dev": true - }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -6005,191 +5872,37 @@ "call-bind": "^1.0.2" } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha512-nKtD/Qxm7tWdZqJoldEC7fF0S41v0mWbeaXG3637stOWfyGxTgWTYE2wtfKmjzpvxv2MA2xzxsXOIiwUpkX6Qw==", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", - "integrity": "sha512-H/ZGY0nIAg3QcOwE1QN/rK/Fa7gJn7Ii5obwp6zyPO4xiPNwpIMjqy2gwjBEGqzkF/vSWEIBQCBuN19hYiL6Qg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "labeled-stream-splicer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", - "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "stream-splicer": "^2.0.0" - } - }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", - "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - } - }, - "lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "argparse": "^2.0.1" } }, - "lead": { + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } + "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", + "integrity": "sha512-H/ZGY0nIAg3QcOwE1QN/rK/Fa7gJn7Ii5obwp6zyPO4xiPNwpIMjqy2gwjBEGqzkF/vSWEIBQCBuN19hYiL6Qg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true }, "levn": { "version": "0.4.1", @@ -6201,35 +5914,6 @@ "type-check": "~0.4.0" } }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -6244,84 +5928,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", - "dev": true - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "loupe": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", @@ -6331,84 +5943,6 @@ "get-func-name": "^2.0.0" } }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", - "dev": true, - "requires": { - "es5-ext": "~0.10.2" - } - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", - "dev": true, - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "dependencies": { - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -6419,26 +5953,10 @@ "safe-buffer": "^5.1.2" } }, - "memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "methods": { @@ -6447,27 +5965,6 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -6503,12 +6000,6 @@ "mime-db": "1.52.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -6533,27 +6024,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -6562,12 +6032,6 @@ "minimist": "^1.2.6" } }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, "mocha": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", @@ -6955,238 +6419,42 @@ "integrity": "sha512-KZvpMJTqzLZw3mOb+EEuYi4YZS41C9iTnb7skVFRxHjUd1OYbl64tCMSmpdIRM9LnwIrSOaRfPtNpF5msgv6Eg==", "dev": true }, - "module-deps": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", - "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "browser-resolve": "^2.0.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.2.0", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, - "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", - "dev": true, - "optional": true - }, - "nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, "nock": { "version": "13.2.8", "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.8.tgz", - "integrity": "sha512-JT42FrXfQRpfyL4cnbBEJdf4nmBpVP0yoCcSBr+xkT8Q1y3pgtaCKHGAAOIFcEJ3O3t0QbVAmid0S0f2bj3Wpg==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.21", - "propagate": "^2.0.0" - } - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "integrity": "sha512-JT42FrXfQRpfyL4cnbBEJdf4nmBpVP0yoCcSBr+xkT8Q1y3pgtaCKHGAAOIFcEJ3O3t0QbVAmid0S0f2bj3Wpg==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -7197,15 +6465,6 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -7217,47 +6476,6 @@ "object-keys": "^1.1.1" } }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -7267,15 +6485,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -7290,68 +6499,6 @@ "word-wrap": "^1.2.3" } }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -7370,12 +6517,6 @@ "p-limit": "^3.0.2" } }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -7385,15 +6526,6 @@ "callsites": "^3.0.0" } }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", - "dev": true, - "requires": { - "path-platform": "~0.11.15" - } - }, "parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", @@ -7406,77 +6538,12 @@ "safe-buffer": "^5.1.1" } }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -7489,38 +6556,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, "pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -7539,105 +6574,24 @@ "sha.js": "^2.4.8" } }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "propagate": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true - }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -7658,33 +6612,6 @@ } } }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, "qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -7702,200 +6629,40 @@ "decode-uri-component": "^0.2.0", "filter-obj": "^1.1.0", "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "requires": { - "resolve": "^1.1.6" + "strict-uri-encode": "^2.0.0" } }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "dev": true, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { - "regenerate": "^1.4.2" + "safe-buffer": "^5.1.0" } }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { - "@babel/runtime": "^7.8.4" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "regexp.prototype.flags": { @@ -7914,181 +6681,12 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "dev": true - }, - "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true - }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", - "dev": true - } - } - }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -8100,51 +6698,16 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rimraf": { @@ -8165,25 +6728,31 @@ "inherits": "^2.0.1" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", - "dev": true + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + }, + "dependencies": { + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + } + } }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { - "rx-lite": "*" + "queue-microtask": "^1.2.2" } }, "safe-buffer": { @@ -8191,15 +6760,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -8210,59 +6770,15 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", - "dev": true, - "requires": { - "sver-compat": "^1.5.0" - } - }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "requires": { "randombytes": "^2.1.0" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -8272,25 +6788,6 @@ "safe-buffer": "^5.0.1" } }, - "shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha512-UTzHm/+AzKfO9RgPgRpDIuMSNie1ubXRaljjlhFMNGYoG7z+rm9AHLPMf70R7887xboDH9Q+5YQbWKObFHEAtw==", - "dev": true, - "requires": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, - "shasum-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", - "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", - "dev": true, - "requires": { - "fast-safe-stringify": "^2.0.7" - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -8306,12 +6803,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -8322,176 +6813,18 @@ "object-inspect": "^1.9.0" } }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "smob": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/smob/-/smob-0.0.6.tgz", + "integrity": "sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==", "dev": true }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -8510,50 +6843,6 @@ } } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, "split-file": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/split-file/-/split-file-2.3.0.tgz", @@ -8568,229 +6857,17 @@ "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", - "dev": true, - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", - "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "safe-buffer": "~5.2.0" } }, "string.prototype.trimend": { @@ -8813,14 +6890,6 @@ "es-abstract": "^1.19.5" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -8830,27 +6899,6 @@ "ansi-regex": "^5.0.1" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -8862,15 +6910,6 @@ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", - "dev": true, - "requires": { - "minimist": "^1.1.0" - } - }, "superagent": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.3.1.tgz", @@ -8908,373 +6947,78 @@ "lru-cache": "^6.0.0" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "dev": true, - "requires": { - "acorn-node": "^1.2.0" - } - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "ternary-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-3.0.0.tgz", - "integrity": "sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ==", - "dev": true, - "requires": { - "duplexify": "^4.1.1", - "fork-stream": "^0.0.4", - "merge-stream": "^2.0.0", - "through2": "^3.0.1" - }, - "dependencies": { - "duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "dev": true, - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", - "dev": true - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", - "dev": true, - "requires": { - "process": "~0.11.0" - } - }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "terser": { + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.6.tgz", + "integrity": "sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true } } }, - "to-regex": { + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through2": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "inherits": "^2.0.4", + "readable-stream": "2 || 3" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { - "through2": "^2.0.3" + "tslib": "^1.8.1" }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } } } }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -9296,16 +7040,10 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "typescript": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", + "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", "dev": true }, "unbox-primitive": { @@ -9319,163 +7057,6 @@ "which-boxed-primitive": "^1.0.2" } }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true - }, - "undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "dev": true, - "requires": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "dependencies": { - "fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", - "dev": true - } - } - }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -9486,43 +7067,13 @@ }, "dependencies": { "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true } } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", @@ -9553,153 +7104,6 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", - "dev": true - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", - "dev": true, - "requires": { - "source-map": "^0.5.1" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, "web-encoding": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", @@ -9730,12 +7134,6 @@ "is-symbol": "^1.0.3" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true - }, "which-typed-array": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", @@ -9749,69 +7147,18 @@ "is-typed-array": "^1.1.9" } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", @@ -9831,55 +7178,6 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true - }, - "yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - } - }, - "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } - }, "yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", diff --git a/package.json b/package.json index e818a7b8..3fd46100 100644 --- a/package.json +++ b/package.json @@ -2,15 +2,28 @@ "name": "minio", "version": "7.0.33", "description": "S3 Compatible Cloud Storage client", - "main": "./dist/main/minio.js", + "main": "dist/main/minio.cjs", + "module": "dist/main/minio.mjs", + "types": "dist/main/minio.d.ts", + "browser": "dist/main/minio.iife.js", + "jsdelivr": "dist/main/minio.iife.js", + "unpkg": "dist/main/minio.iife.js", + "exports": { + ".": { + "import": "./dist/main/minio.mjs", + "require": "./dist/main/minio.cjs" + }, + "./package.json": "./package.json", + "./*": "./*" + }, "scripts": { - "compile": "gulp compile", - "test": "gulp test", - "lint": "gulp lint", - "lint-fix": "gulp lint --fix", - "prepublishOnly": "gulp test", - "functional": "gulp functionalTest", - "browserify": "gulp browserify", + "compile": "rollup -c", + "test": "mocha test/**/*.js", + "lint": "eslint --ignore-path .gitignore .", + "lint-fix": "eslint --ignore-path .gitignore --fix .", + "prepublishOnly": "npm run test", + "functional": "mocha test/functional/*.js ", + "browserify": "npm run compile", "prepare": "npm run compile" }, "repository": { @@ -19,11 +32,11 @@ }, "author": { "name": "MinIO, Inc.", - "email": "", + "email": "hello@min.io", "url": "https://min.io" }, "engines": { - "node": ">8 <=19" + "node": ">8" }, "license": "Apache-2.0", "bugs": { @@ -34,7 +47,6 @@ "dependencies": { "async": "^3.1.0", "block-stream2": "^2.0.0", - "browser-or-node": "^1.3.0", "buffer-crc32": "^0.2.13", "crypto-browserify": "^3.12.0", "es6-error": "^4.1.1", @@ -51,24 +63,21 @@ "xml2js": "^0.4.15" }, "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/preset-env": "^7.12.10", - "babelify": "^10.0.0", - "browserify": "^16.5.2", + "@rollup/plugin-terser": "^0.4.0", + "@rollup/plugin-typescript": "^11.0.0", + "@types/node": "^18.15.5", + "@typescript-eslint/eslint-plugin": "^5.56.0", + "@typescript-eslint/parser": "^5.56.0", "chai": "^4.2.0", "eslint": "^8.9.0", - "gulp": "^4.0.2", - "gulp-babel": "^8.0.0", - "gulp-eslint": "^4.0.2", - "gulp-if": "^3.0.0", - "gulp-mocha": "^8.0.0", - "gulp-sourcemaps": "^2.6.5", "mocha": "^9.2.0", "mocha-steps": "^1.1.0", "nock": "^13.2.2", - "source-map-support": "^0.5.13", + "rollup": "^2.79.1", "split-file": "^2.2.2", "superagent": "^5.1.0", + "tslib": "^2.5.0", + "typescript": "^5.0.2", "uuid": "^3.3.2" }, "keywords": [ diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 00000000..ad3c0fd3 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,24 @@ +import ts from '@rollup/plugin-typescript' +import { terser } from '@rollup/plugin-terser' + +export default { + input: 'src/main/minio.ts', + output: [ + { + file: 'dist/main/minio.cjs', + format: 'cjs', + exports: 'default' + }, + { + file: 'dist/main/minio.mjs', + format: 'es' + }, + { + file: 'dist/main/minio.iife.js', + format: 'iife', + name: 'MinIO', + plugins: [terser()] + } + ], + plugins: [ts({ tsconfig: './tsconfig.json' })] +} \ No newline at end of file diff --git a/src/main/AssumeRoleProvider.js b/src/main/AssumeRoleProvider.ts similarity index 67% rename from src/main/AssumeRoleProvider.js rename to src/main/AssumeRoleProvider.ts index 27f95398..247d9e3e 100644 --- a/src/main/AssumeRoleProvider.js +++ b/src/main/AssumeRoleProvider.ts @@ -1,12 +1,46 @@ import Http from 'http' import Https from 'https' -import {makeDateLong, parseXml, toSha256} from "./helpers" -import {signV4ByServiceName} from "./signing" -import CredentialProvider from "./CredentialProvider" -import Credentials from "./Credentials" +import {makeDateLong, parseXml, toSha256} from './helpers' +import {signV4ByServiceName} from './signing' +import CredentialProvider from './CredentialProvider' +import Credentials from './Credentials' const {URLSearchParams, URL} = require('url') +export type AssumeRoleProviderOptions = { + stsEndpoint: string, + accessKey: string, + secretKey: string, + durationSeconds?: number, + sessionToken?: string, + policy?: string, + region?: string, + roleArn?: string, + roleSessionName?: string, + externalId?: string, + token?: string, + webIdentityToken?: string, + action?: string +} + class AssumeRoleProvider extends CredentialProvider { + private stsEndpoint: string; + private accessKey: string; + private secretKey: string; + private durationSeconds: number; + private sessionToken?: string; + private policy?: string; + private region: string; + private roleArn?: string; + private roleSessionName?: string; + private externalId?: string; + private token?: string; + private webIdentityToken?: string; + private action?: string; + private credentials: Credentials | null | undefined + private expirySeconds: number | null | undefined + private accessExpiredAt: number | null | undefined + + constructor({ stsEndpoint, accessKey, @@ -20,8 +54,8 @@ class AssumeRoleProvider extends CredentialProvider { externalId, token, webIdentityToken, - action = "AssumeRole" - }) { + action = 'AssumeRole' + }: AssumeRoleProviderOptions) { super({}) this.stsEndpoint = stsEndpoint @@ -52,10 +86,10 @@ class AssumeRoleProvider extends CredentialProvider { const url = new URL(this.stsEndpoint) const hostValue = url.hostname const portValue = url.port - const isHttp = url.protocol.includes("http:") + const isHttp = url.protocol.includes('http:') const qryParams = new URLSearchParams() - qryParams.set("Action", this.action) - qryParams.set("Version", "2011-06-15") + qryParams.set('Action', this.action) + qryParams.set('Version', '2011-06-15') const defaultExpiry = 900 let expirySeconds = parseInt(this.durationSeconds) @@ -64,28 +98,28 @@ class AssumeRoleProvider extends CredentialProvider { } this.expirySeconds = expirySeconds // for calculating refresh of credentials. - qryParams.set("DurationSeconds", this.expirySeconds) + qryParams.set('DurationSeconds', this.expirySeconds) if (this.policy) { - qryParams.set("Policy", this.policy) + qryParams.set('Policy', this.policy) } if (this.roleArn) { - qryParams.set("RoleArn", this.roleArn) + qryParams.set('RoleArn', this.roleArn) } if (this.roleSessionName != null) { - qryParams.set("RoleSessionName", this.roleSessionName) + qryParams.set('RoleSessionName', this.roleSessionName) } if (this.token != null) { - qryParams.set("Token", this.token) + qryParams.set('Token', this.token) } if (this.webIdentityToken) { - qryParams.set("WebIdentityToken", this.webIdentityToken) + qryParams.set('WebIdentityToken', this.webIdentityToken) } if (this.externalId) { - qryParams.set("ExternalId", this.externalId) + qryParams.set('ExternalId', this.externalId) } @@ -100,19 +134,19 @@ class AssumeRoleProvider extends CredentialProvider { const requestOptions = { hostname: hostValue, port: portValue, - path: "/", + path: '/', protocol: url.protocol, - method: "POST", + method: 'POST', headers: { - "Content-Type": "application/x-www-form-urlencoded", - "content-length": urlParams.length, - "host": hostValue, - "x-amz-date": makeDateLong(date), + 'Content-Type': 'application/x-www-form-urlencoded', + 'content-length': urlParams.length, + 'host': hostValue, + 'x-amz-date': makeDateLong(date), 'x-amz-content-sha256': contentSha256 } } - const authorization = signV4ByServiceName(requestOptions, this.accessKey, this.secretKey, this.region, date, "sts") + const authorization = signV4ByServiceName(requestOptions, this.accessKey, this.secretKey, this.region, date, 'sts') requestOptions.headers.authorization = authorization return { @@ -132,12 +166,12 @@ class AssumeRoleProvider extends CredentialProvider { const promise = new Promise((resolve, reject) => { const requestObj = Transport.request(requestOptions, (resp) => { - let resChunks = [] + const resChunks = [] resp.on('data', rChunk => { resChunks.push(rChunk) }) resp.on('end', () => { - let body = Buffer.concat(resChunks).toString() + const body = Buffer.concat(resChunks).toString() const xmlobj = parseXml(body) resolve(xmlobj) }) @@ -156,8 +190,8 @@ class AssumeRoleProvider extends CredentialProvider { } parseCredentials(respObj={}) { - if(respObj.ErrorResponse){ - throw new Error("Unable to obtain credentials:", respObj) + if (respObj.ErrorResponse) { + throw new Error('Unable to obtain credentials:', respObj) } const { AssumeRoleResponse: { diff --git a/src/main/CredentialProvider.js b/src/main/CredentialProvider.ts similarity index 56% rename from src/main/CredentialProvider.js rename to src/main/CredentialProvider.ts index c1b59bec..71d1ea83 100644 --- a/src/main/CredentialProvider.js +++ b/src/main/CredentialProvider.ts @@ -1,11 +1,19 @@ -import Credentials from "./Credentials" +import Credentials from './Credentials' + +type CredentialProviderOptions = { + accessKey: string, + secretKey: string, + sessionToken: string, +} class CredentialProvider { + private credentials: Credentials; + constructor({ accessKey, secretKey, sessionToken - }) { + }: CredentialProviderOptions) { this.credentials = new Credentials({ accessKey, secretKey, @@ -17,40 +25,38 @@ class CredentialProvider { return this.credentials.get() } - setCredentials(credentials) { + setCredentials(credentials: Credential) { if (credentials instanceof Credentials) { this.credentials = credentials } else { - throw new Error("Unable to set Credentials . it should be an instance of Credentials class") + throw new Error('Unable to set Credentials. It should be an instance of Credentials class') } } - setAccessKey(accessKey) { + setAccessKey(accessKey: string) { this.credentials.setAccessKey(accessKey) } - getAccessKey() { + getAccessKey(): string { return this.credentials.getAccessKey() } - setSecretKey(secretKey) { + setSecretKey(secretKey: string) { this.credentials.setSecretKey(secretKey) } - getSecretKey() { + getSecretKey(): string { return this.credentials.getSecretKey() } - setSessionToken(sessionToken) { + setSessionToken(sessionToken: string) { this.credentials.setSessionToken(sessionToken) } - getSessionToken() { + getSessionToken(): string { return this.credentials.getSessionToken() } - - } export default CredentialProvider \ No newline at end of file diff --git a/src/main/Credentials.js b/src/main/Credentials.ts similarity index 52% rename from src/main/Credentials.js rename to src/main/Credentials.ts index acd0d247..919099cf 100644 --- a/src/main/Credentials.js +++ b/src/main/Credentials.ts @@ -1,42 +1,50 @@ -class Credentials{ +export type CredentialsOptions = { + accessKey: string, + secretKey: string, + sessionToken: string +} + +class Credentials { + private accessKey: string; + private secretKey: string; + private sessionToken: string; + constructor({ accessKey, secretKey, sessionToken - }) { + }: CredentialsOptions) { this.accessKey = accessKey this.secretKey = secretKey this.sessionToken=sessionToken } - - setAccessKey(accessKey){ + setAccessKey(accessKey: string) { this.accessKey = accessKey } - getAccessKey(){ + getAccessKey(): string { return this.accessKey } - setSecretKey(secretKey){ + setSecretKey(secretKey: string) { this.secretKey=secretKey } - getSecretKey(){ + getSecretKey(): string { return this.secretKey } - setSessionToken (sessionToken){ + setSessionToken(sessionToken: string) { this.sessionToken = sessionToken } - getSessionToken (){ + getSessionToken(): string { return this.sessionToken } - get(){ + get(): CredentialsOptions { return { accessKey:this.accessKey, secretKey:this.secretKey, sessionToken:this.sessionToken } } - } export default Credentials \ No newline at end of file diff --git a/src/main/copy-conditions.ts b/src/main/copy-conditions.ts new file mode 100644 index 00000000..b845b570 --- /dev/null +++ b/src/main/copy-conditions.ts @@ -0,0 +1,35 @@ +export class CopyConditions { + public modified: string + public unmodified: string + public matchETag: string + public matchETagExcept: string + + constructor() { + this.modified = '' + this.unmodified = '' + this.matchETag = '' + this.matchETagExcept = '' + } + + setModified(date: { toUTCString: () => string }) { + if (!(date instanceof Date)) + throw new TypeError('date must be of type Date') + + this.modified = date.toUTCString() + } + + setUnmodified(date: { toUTCString: () => string }) { + if (!(date instanceof Date)) + throw new TypeError('date must be of type Date') + + this.unmodified = date.toUTCString() + } + + setMatchETag(etag: string) { + this.matchETag = etag + } + + setMatchETagExcept(etag: string) { + this.matchETagExcept = etag + } +} \ No newline at end of file diff --git a/src/main/errors.js b/src/main/errors.js deleted file mode 100644 index 144a955b..00000000 --- a/src/main/errors.js +++ /dev/null @@ -1,135 +0,0 @@ -/* - * MinIO Javascript Library for Amazon S3 Compatible Cloud Storage, (C) 2015 MinIO, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import ExtendableError from 'es6-error' - -// AnonymousRequestError is generated for anonymous keys on specific -// APIs. NOTE: PresignedURL generation always requires access keys. -export class AnonymousRequestError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// InvalidArgumentError is generated for all invalid arguments. -export class InvalidArgumentError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// InvalidPortError is generated when a non integer value is provided -// for ports. -export class InvalidPortError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// InvalidEndpointError is generated when an invalid end point value is -// provided which does not follow domain standards. -export class InvalidEndpointError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// InvalidBucketNameError is generated when an invalid bucket name is -// provided which does not follow AWS S3 specifications. -// http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html -export class InvalidBucketNameError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// InvalidObjectNameError is generated when an invalid object name is -// provided which does not follow AWS S3 specifications. -// http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html -export class InvalidObjectNameError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// AccessKeyRequiredError generated by signature methods when access -// key is not found. -export class AccessKeyRequiredError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// SecretKeyRequiredError generated by signature methods when secret -// key is not found. -export class SecretKeyRequiredError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// ExpiresParamError generated when expires parameter value is not -// well within stipulated limits. -export class ExpiresParamError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// InvalidDateError generated when invalid date is found. -export class InvalidDateError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// InvalidPrefixError generated when object prefix provided is invalid -// or does not conform to AWS S3 object key restrictions. -export class InvalidPrefixError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// InvalidBucketPolicyError generated when the given bucket policy is invalid. -export class InvalidBucketPolicyError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// IncorrectSizeError generated when total data read mismatches with -// the input size. -export class IncorrectSizeError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// InvalidXMLError generated when an unknown XML is found. -export class InvalidXMLError extends ExtendableError { - constructor(message) { - super(message) - } -} - -// S3Error is generated for errors returned from S3 server. -// see getErrorTransformer for details -export class S3Error extends ExtendableError { - constructor(message) { - super(message) - } -} diff --git a/src/main/errors.ts b/src/main/errors.ts new file mode 100644 index 00000000..19acdb10 --- /dev/null +++ b/src/main/errors.ts @@ -0,0 +1,188 @@ +/* + * MinIO Javascript Library for Amazon S3 Compatible Cloud Storage, (C) 2015 MinIO, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +// AnonymousRequestError is generated for anonymous keys on specific +// APIs. NOTE: PresignedURL generation always requires access keys. +export class AnonymousRequestError extends Error { + constructor(message: string) { + super(message) + + this.name = 'AnonymousRequestError' + Error.captureStackTrace(this, this.constructor) + } +} + +// InvalidArgumentError is generated for all invalid arguments. +export class InvalidArgumentError extends Error { + constructor(message: string) { + super(message) + + this.name = 'InvalidArgumentError' + Error.captureStackTrace(this, this.constructor) + } +} + +// InvalidPortError is generated when a non integer value is provided +// for ports. +export class InvalidPortError extends Error { + constructor(message: string) { + super(message) + + this.name = 'InvalidPortError' + Error.captureStackTrace(this, this.constructor) + } +} + +// InvalidEndpointError is generated when an invalid end point value is +// provided which does not follow domain standards. +export class InvalidEndpointError extends Error { + constructor(message: string) { + super(message) + + this.name = 'InvalidEndpointError' + Error.captureStackTrace(this, this.constructor) + } +} + +// InvalidBucketNameError is generated when an invalid bucket name is +// provided which does not follow AWS S3 specifications. +// http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html +export class InvalidBucketNameError extends Error { + constructor(message: string) { + super(message) + + this.name = 'InvalidBucketNameError' + Error.captureStackTrace(this, this.constructor) + } +} + +// InvalidObjectNameError is generated when an invalid object name is +// provided which does not follow AWS S3 specifications. +// http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html +export class InvalidObjectNameError extends Error { + constructor(message: string) { + super(message) + + this.name = 'InvalidObjectNameError' + Error.captureStackTrace(this, this.constructor) + } +} + +// AccessKeyRequiredError generated by signature methods when access +// key is not found. +export class AccessKeyRequiredError extends Error { + constructor(message: string) { + super(message) + + this.name = 'AccessKeyRequiredError' + Error.captureStackTrace(this, this.constructor) + } +} + +// SecretKeyRequiredError generated by signature methods when secret +// key is not found. +export class SecretKeyRequiredError extends Error { + constructor(message: string) { + super(message) + + this.name = 'SecretKeyRequiredError' + Error.captureStackTrace(this, this.constructor) + } +} + +// ExpiresParamError generated when expires parameter value is not +// well within stipulated limits. +export class ExpiresParamError extends Error { + constructor(message: string) { + super(message) + + this.name = 'ExpiresParamError' + Error.captureStackTrace(this, this.constructor) + } +} + +// InvalidDateError generated when invalid date is found. +export class InvalidDateError extends Error { + constructor(message: string) { + super(message) + + this.name = 'InvalidDateError' + Error.captureStackTrace(this, this.constructor) + } +} + +// InvalidPrefixError generated when object prefix provided is invalid +// or does not conform to AWS S3 object key restrictions. +export class InvalidPrefixError extends Error { + constructor(message: string) { + super(message) + + this.name = 'InvalidPrefixError' + Error.captureStackTrace(this, this.constructor) + } +} + +// InvalidBucketPolicyError generated when the given bucket policy is invalid. +export class InvalidBucketPolicyError extends Error { + constructor(message: string) { + super(message) + + this.name = 'InvalidBucketPolicyError' + Error.captureStackTrace(this, this.constructor) + } +} + +// IncorrectSizeError generated when total data read mismatches with +// the input size. +export class IncorrectSizeError extends Error { + constructor(message: string) { + super(message) + + this.name = 'IncorrectSizeError' + Error.captureStackTrace(this, this.constructor) + } +} + +// InvalidXMLError generated when an unknown XML is found. +export class InvalidXMLError extends Error { + constructor(message: string) { + super(message) + + this.name = 'InvalidXMLError' + Error.captureStackTrace(this, this.constructor) + } +} + +// S3Error is generated for errors returned from S3 server. +// see getErrorTransformer for details +export class S3Error extends Error { + constructor(message: string) { + super(message) + + this.name = 'S3Error' + Error.captureStackTrace(this, this.constructor) + } +} + +export class MisbehavingServerError extends Error { + constructor(message: string) { + super(message); + + this.name = 'MisbehavingServerError' + Error.captureStackTrace(this, this.constructor) + } +} \ No newline at end of file diff --git a/src/main/extensions.js b/src/main/extensions.ts similarity index 93% rename from src/main/extensions.js rename to src/main/extensions.ts index 2e923d11..356f6e3d 100644 --- a/src/main/extensions.js +++ b/src/main/extensions.ts @@ -68,11 +68,11 @@ export default class extensions { throw new TypeError('startAfter should be of type "string"') } // if recursive is false set delimiter to '/' - var delimiter = recursive ? '' : '/' - var continuationToken = '' - var objects = [] - var ended = false - var readStream = Stream.Readable({objectMode: true}) + const delimiter = recursive ? '' : '/' + let continuationToken = '' + let objects = [] + let ended = false + const readStream = Stream.Readable({objectMode: true}) readStream._read = () => { // push one object per _read() if (objects.length) { @@ -126,15 +126,15 @@ export default class extensions { if (!isString(startAfter)) { throw new TypeError('startAfter should be of type "string"') } - var queries = [] + const queries = [] // Call for listing objects v2 API - queries.push(`list-type=2`) - queries.push(`encoding-type=url`) + queries.push('list-type=2') + queries.push('encoding-type=url') // escape every value in query string, except maxKeys queries.push(`prefix=${uriEscape(prefix)}`) queries.push(`delimiter=${uriEscape(delimiter)}`) - queries.push(`metadata=true`) + queries.push('metadata=true') if (continuationToken) { continuationToken = uriEscape(continuationToken) @@ -153,12 +153,12 @@ export default class extensions { queries.push(`max-keys=${maxKeys}`) } queries.sort() - var query = '' + let query = '' if (queries.length > 0) { query = `${queries.join('&')}` } - var method = 'GET' - var transformer = transformers.getListObjectsV2WithMetadataTransformer() + const method = 'GET' + const transformer = transformers.getListObjectsV2WithMetadataTransformer() this.client.makeRequest({method, bucketName, query}, '', [200], '', true, (e, response) => { if (e) return transformer.emit('error', e) pipesetup(response, transformer) diff --git a/src/main/helpers.js b/src/main/helpers.ts similarity index 68% rename from src/main/helpers.js rename to src/main/helpers.ts index 50865b5c..db436643 100644 --- a/src/main/helpers.js +++ b/src/main/helpers.ts @@ -14,32 +14,34 @@ * limitations under the License. */ -import stream from 'stream' +import stream, { Stream } from 'stream' import mime from 'mime-types' -var Crypto = require('crypto-browserify') -import fxp from "fast-xml-parser" +const Crypto = require('crypto-browserify') +import fxp from 'fast-xml-parser' const ipaddr = require('ipaddr.js') -import { isBrowser } from "browser-or-node" const fs = require('fs') -const path = require("path") +const path = require('path') import _ from 'lodash' import * as errors from './errors.js' import querystring from 'query-string' +const isBrowser = + typeof window !== 'undefined' && typeof window.document !== 'undefined' + // Returns a wrapper function that will promisify a given callback function. // It will preserve 'this'. export function promisify(fn) { return function() { // If the last argument is a function, assume its the callback. - let callback = arguments[arguments.length - 1] + const callback = arguments[arguments.length - 1] // If the callback is given, don't promisify, just pass straight in. if (typeof callback === 'function') return fn.apply(this, arguments) // Otherwise, create a new set of arguments, and wrap // it in a promise. - let args = [...arguments] + const args = [...arguments] return new Promise((resolve, reject) => { // Add the callback function. @@ -58,9 +60,9 @@ export function promisify(fn) { // All characters in string which are NOT unreserved should be percent encoded. // Unreserved characers are : ALPHA / DIGIT / "-" / "." / "_" / "~" // Reference https://tools.ietf.org/html/rfc3986#section-2.2 -export function uriEscape(string) { +export function uriEscape(string: string): string { return string.split('').reduce((acc, elem) => { - let buf = Buffer.from(elem) + const buf = Buffer.from(elem) if (buf.length === 1) { // length 1 indicates that elem is not a unicode character. // Check if it is an unreserved characer. @@ -79,23 +81,23 @@ export function uriEscape(string) { } // elem needs encoding - i.e elem should be encoded if it's not unreserved // character or if it's a unicode character. - for (var i = 0; i < buf.length; i++) { - acc = acc + "%" + buf[i].toString(16).toUpperCase() + for (let i = 0; i < buf.length; i++) { + acc = acc + '%' + buf[i].toString(16).toUpperCase() } return acc }, '') } -export function uriResourceEscape(string) { +export function uriResourceEscape(string: string): string { return uriEscape(string).replace(/%2F/g, '/') } -export function getScope(region, date, serviceName="s3") { +export function getScope(region: string, date: string, serviceName = 's3'): string { return `${makeDateShort(date)}/${region}/${serviceName}/aws4_request` } // isAmazonEndpoint - true if endpoint is 's3.amazonaws.com' or 's3.cn-north-1.amazonaws.com.cn' -export function isAmazonEndpoint(endpoint) { +export function isAmazonEndpoint(endpoint: string): boolean { return endpoint === 's3.amazonaws.com' || endpoint === 's3.cn-north-1.amazonaws.com.cn' } @@ -104,7 +106,7 @@ export function isAmazonEndpoint(endpoint) { // style if the protocol is 'https:', this is due to SSL wildcard // limitation. For all other buckets and Amazon S3 endpoint we will // default to virtual host style. -export function isVirtualHostStyle(endpoint, protocol, bucket, pathStyle) { +export function isVirtualHostStyle(endpoint: string, protocol: string, bucket: string, pathStyle: string): boolean { if (protocol === 'https:' && bucket.indexOf('.') > -1) { return false } @@ -112,18 +114,18 @@ export function isVirtualHostStyle(endpoint, protocol, bucket, pathStyle) { } -export function isValidIP(ip) { +export function isValidIP(ip: string): boolean { return ipaddr.isValid(ip) } // isValidEndpoint - true if endpoint is valid domain. -export function isValidEndpoint(endpoint) { +export function isValidEndpoint(endpoint: string): boolean { return isValidDomain(endpoint) || isValidIP(endpoint) } // isValidDomain - true if input host is a valid domain. -export function isValidDomain(host) { - if (!isString(host)) return false +export function isValidDomain(host: string): boolean { + if (!isString(host as never)) return false // See RFC 1035, RFC 3696. if (host.length === 0 || host.length > 255) { return false @@ -140,9 +142,9 @@ export function isValidDomain(host) { if (host[0] === '.') { return false } - var alphaNumerics = '`~!@#$%^&*()+={}[]|\\"\';:> -1) { return false } @@ -154,7 +156,7 @@ export function isValidDomain(host) { // Probes contentType using file extensions. // For example: probeContentType('file.png') returns 'image/png'. -export function probeContentType(path) { +export function probeContentType(path: string): string { let contentType = mime.lookup(path) if (!contentType) { contentType = 'application/octet-stream' @@ -163,21 +165,21 @@ export function probeContentType(path) { } // isValidPort - is input port valid. -export function isValidPort(port) { +export function isValidPort(port: number): boolean { // verify if port is a number. - if (!isNumber(port)) return false + if (!isNumber(port as never)) return false // port cannot be negative. if (port < 0) return false // port '0' is valid and special case return true. if (port === 0) return true - var min_port = 1 - var max_port = 65535 + const min_port = 1 + const max_port = 65535 // Verify if port is in range. return port >= min_port && port <= max_port } -export function isValidBucketName(bucket) { - if (!isString(bucket)) return false +export function isValidBucketName(bucket: string): boolean { + if (!isString(bucket as never)) return false // bucket length should be less than and no more than 63 // characters long. @@ -201,91 +203,91 @@ export function isValidBucketName(bucket) { } // check if objectName is a valid object name -export function isValidObjectName(objectName) { +export function isValidObjectName(objectName: string): boolean { if (!isValidPrefix(objectName)) return false if (objectName.length === 0) return false return true } // check if prefix is valid -export function isValidPrefix(prefix) { - if (!isString(prefix)) return false +export function isValidPrefix(prefix: string): boolean { + if (!isString(prefix as never)) return false if (prefix.length > 1024) return false return true } // check if typeof arg number -export function isNumber(arg) { - return typeof(arg) === 'number' +export function isNumber(arg: never) { + return typeof arg === 'number' } // check if typeof arg function -export function isFunction(arg) { - return typeof(arg) === 'function' +export function isFunction(arg: never) { + return typeof arg === 'function' } // check if typeof arg string -export function isString(arg) { - return typeof(arg) === 'string' +export function isString(arg: never) { + return typeof arg === 'string' } // check if typeof arg object -export function isObject(arg) { - return typeof(arg) === 'object' && arg !== null +export function isObject(arg: never) { + return typeof arg === 'object' && arg !== null } // check if object is readable stream -export function isReadableStream(arg) { +export function isReadableStream(arg: never) { return isObject(arg) && isFunction(arg._read) } // check if arg is boolean -export function isBoolean(arg) { - return typeof(arg) === 'boolean' +export function isBoolean(arg: never) { + return typeof arg === 'boolean' } // check if arg is array -export function isArray(arg) { +export function isArray(arg: never) { return Array.isArray(arg) } // check if arg is a valid date -export function isValidDate(arg) { +export function isValidDate(arg: unknown) { return arg instanceof Date && !isNaN(arg) } // Create a Date string with format: // 'YYYYMMDDTHHmmss' + Z -export function makeDateLong(date) { - date = date || new Date() +export function makeDateLong(date?: Date) { + const _date = date || new Date() // Gives format like: '2017-08-07T16:28:59.889Z' - date = date.toISOString() + const _dateString = _date.toISOString() - return date.slice(0, 4) + - date.slice(5, 7) + - date.slice(8, 13) + - date.slice(14, 16) + - date.slice(17, 19) + 'Z' + return _dateString.slice(0, 4) + + _dateString.slice(5, 7) + + _dateString.slice(8, 13) + + _dateString.slice(14, 16) + + _dateString.slice(17, 19) + 'Z' } // Create a Date string with format: // 'YYYYMMDD' -export function makeDateShort(date) { - date = date || new Date() +export function makeDateShort(date?: Date) { + const _date = date || new Date() // Gives format like: '2017-08-07T16:28:59.889Z' - date = date.toISOString() + const dateString = _date.toISOString() - return date.slice(0, 4) + - date.slice(5, 7) + - date.slice(8, 10) + return dateString.slice(0, 4) + + dateString.slice(5, 7) + + dateString.slice(8, 10) } // pipesetup sets up pipe() from left to right os streams array // pipesetup will also make sure that error emitted at any of the upstream Stream // will be emitted at the last stream. This makes error handling simple -export function pipesetup(...streams) { +export function pipesetup(...streams: Stream[]) { return streams.reduce((src, dst) => { src.on('error', err => dst.emit('error', err)) return src.pipe(dst) @@ -293,8 +295,8 @@ export function pipesetup(...streams) { } // return a Readable stream that emits data -export function readableStream(data) { - var s = new stream.Readable() +export function readableStream(data: any) { + const s = new stream.Readable() s._read = () => {} s.push(data) s.push(null) @@ -304,24 +306,24 @@ export function readableStream(data) { // Process metadata to insert appropriate value to `content-type` attribute export function insertContentType(metaData, filePath) { // check if content-type attribute present in metaData - for (var key in metaData) { + for (const key in metaData) { if (key.toLowerCase() === 'content-type') { return metaData } } // if `content-type` attribute is not present in metadata, // then infer it from the extension in filePath - var newMetadata = Object.assign({}, metaData) + const newMetadata = Object.assign({}, metaData) newMetadata['content-type'] = probeContentType(filePath) return newMetadata } // Function prepends metadata with the appropriate prefix if it is not already on export function prependXAMZMeta(metaData) { - var newMetadata = Object.assign({}, metaData) - for (var key in metaData) { - if(!isAmzHeader(key) && !isSupportedHeader(key) && !isStorageclassHeader(key)) { - newMetadata["X-Amz-Meta-" + key ] = newMetadata[key] + const newMetadata = Object.assign({}, metaData) + for (const key in metaData) { + if (!isAmzHeader(key) && !isSupportedHeader(key) && !isStorageclassHeader(key)) { + newMetadata['X-Amz-Meta-' + key ] = newMetadata[key] delete newMetadata[key] } } @@ -329,32 +331,32 @@ export function prependXAMZMeta(metaData) { } // Checks if it is a valid header according to the AmazonS3 API -export function isAmzHeader(key) { - var temp = key.toLowerCase() - return temp.startsWith("x-amz-meta-") || temp === "x-amz-acl" || temp.startsWith("x-amz-server-side-encryption-") || temp === "x-amz-server-side-encryption" +export function isAmzHeader(key: string) { + const temp = key.toLowerCase() + return temp.startsWith('x-amz-meta-') || temp === 'x-amz-acl' || temp.startsWith('x-amz-server-side-encryption-') || temp === 'x-amz-server-side-encryption' } // Checks if it is a supported Header -export function isSupportedHeader(key) { - var supported_headers = [ +export function isSupportedHeader(key: string) { + const supported_headers = [ 'content-type', 'cache-control', 'content-encoding', 'content-disposition', 'content-language', 'x-amz-website-redirect-location'] - return (supported_headers.indexOf(key.toLowerCase()) > -1) + return supported_headers.indexOf(key.toLowerCase()) > -1 } // Checks if it is a storage header -export function isStorageclassHeader(key) { - return key.toLowerCase() === "x-amz-storage-class" +export function isStorageclassHeader(key: string) { + return key.toLowerCase() === 'x-amz-storage-class' } export function extractMetadata(metaData) { - var newMetadata = {} - for (var key in metaData) { - if(isSupportedHeader(key) || isStorageclassHeader(key) || isAmzHeader(key)) { - if(key.toLowerCase().startsWith("x-amz-meta-")) { - newMetadata[key.slice(11,key.length)] = metaData[key] + const newMetadata = {} + for (const key in metaData) { + if (isSupportedHeader(key) || isStorageclassHeader(key) || isAmzHeader(key)) { + if (key.toLowerCase().startsWith('x-amz-meta-')) { + newMetadata[key.slice(11, key.length)] = metaData[key] } else { newMetadata[key] = metaData[key] } @@ -364,35 +366,35 @@ export function extractMetadata(metaData) { } -export function getVersionId(headers={}){ - const versionIdValue = headers["x-amz-version-id"] - return versionIdValue || null +export function getVersionId(headers={}) { + const versionIdValue = headers['x-amz-version-id'] + return versionIdValue || null } -export function getSourceVersionId(headers={}){ - const sourceVersionId = headers["x-amz-copy-source-version-id"] - return sourceVersionId || null +export function getSourceVersionId(headers={}) { + const sourceVersionId = headers['x-amz-copy-source-version-id'] + return sourceVersionId || null } export function sanitizeETag(etag='') { - var replaceChars = {'"':'','"':'','"':'','"':'','"':''} + const replaceChars = {'"':'', '"':'', '"':'', '"':'', '"':''} return etag.replace(/^("|"|")|("|"|")$/g, m => replaceChars[m]) } export const RETENTION_MODES ={ - GOVERNANCE:"GOVERNANCE", - COMPLIANCE:"COMPLIANCE" + GOVERNANCE: 'GOVERNANCE', + COMPLIANCE: 'COMPLIANCE' } export const RETENTION_VALIDITY_UNITS={ - DAYS:"Days", - YEARS:"Years" + DAYS:'Days', + YEARS:'Years' } export const LEGAL_HOLD_STATUS={ - ENABLED:"ON", - DISABLED:"OFF" + ENABLED:'ON', + DISABLED:'OFF' } const objectToBuffer = (payload) =>{ @@ -424,7 +426,7 @@ export const toArray = (param) => { export const sanitizeObjectKey=(objectName)=>{ // + symbol characters are not decoded as spaces in JS. so replace them first and decode to get the correct result. - let asStrName = (objectName ? objectName.toString() : "").replace(/\+/g, ' ') + const asStrName = (objectName ? objectName.toString() : '').replace(/\+/g, ' ') const sanitizedName = decodeURIComponent(asStrName) return sanitizedName } @@ -450,18 +452,18 @@ export const PART_CONSTRAINTS ={ export const ENCRYPTION_TYPES ={ // SSEC represents server-side-encryption with customer provided keys - SSEC: "SSE-C", + SSEC: 'SSE-C', // KMS represents server-side-encryption with managed keys - KMS: "KMS" + KMS: 'KMS' } -const GENERIC_SSE_HEADER="X-Amz-Server-Side-Encryption" +const GENERIC_SSE_HEADER='X-Amz-Server-Side-Encryption' const ENCRYPTION_HEADERS ={ // sseGenericHeader is the AWS SSE header used for SSE-S3 and SSE-KMS. sseGenericHeader : GENERIC_SSE_HEADER, // sseKmsKeyID is the AWS SSE-KMS key id. - sseKmsKeyID : GENERIC_SSE_HEADER + "-Aws-Kms-Key-Id", + sseKmsKeyID : GENERIC_SSE_HEADER + '-Aws-Kms-Key-Id' } /** @@ -472,12 +474,12 @@ const ENCRYPTION_HEADERS ={ function getEncryptionHeaders (encConfig) { const encType = encConfig.type const encHeaders = {} - if(!_.isEmpty(encType) ){ - if( encType === ENCRYPTION_TYPES.SSEC) { + if (!_.isEmpty(encType) ) { + if ( encType === ENCRYPTION_TYPES.SSEC) { return { - [encHeaders[ENCRYPTION_HEADERS.sseGenericHeader]]: "AES256" + [encHeaders[ENCRYPTION_HEADERS.sseGenericHeader]]: 'AES256' } - } else if(encType === ENCRYPTION_TYPES.KMS){ + } else if (encType === ENCRYPTION_TYPES.KMS) { return { [ENCRYPTION_HEADERS.sseGenericHeader]:encConfig.SSEAlgorithm, [ENCRYPTION_HEADERS.sseKmsKeyID]:encConfig.KMSMasterKeyID @@ -504,17 +506,17 @@ export class CopySourceOptions { * @param Encryption */ constructor({ - Bucket="", - Object="", - VersionID="", - MatchETag="", - NoMatchETag="", + Bucket='', + Object='', + VersionID='', + MatchETag='', + NoMatchETag='', MatchModifiedSince=null, MatchUnmodifiedSince=null, MatchRange=false, Start=0, End=0, - Encryption= {}, + Encryption= {} }={}) { this.Bucket=Bucket @@ -530,7 +532,7 @@ export class CopySourceOptions { this.Encryption=Encryption } - validate(){ + validate() { if (!isValidBucketName(this.Bucket)) { throw new errors.InvalidBucketNameError('Invalid Source bucket name: ' + this.Bucket) } @@ -538,34 +540,34 @@ export class CopySourceOptions { throw new errors.InvalidObjectNameError(`Invalid Source object name: ${this.Object}`) } if (this.MatchRange && (this.Start !==-1 && this.End !==-1) && this.Start > this.End || this.Start < 0) { - throw new errors.InvalidObjectNameError("Source start must be non-negative, and start must be at most end.") - } else if(this.MatchRange&& !isNumber(this.Start) || !isNumber(this.End) ){ - throw new errors.InvalidObjectNameError("MatchRange is specified. But Invalid Start and End values are specified. ") + throw new errors.InvalidObjectNameError('Source start must be non-negative, and start must be at most end.') + } else if (this.MatchRange&& !isNumber(this.Start) || !isNumber(this.End) ) { + throw new errors.InvalidObjectNameError('MatchRange is specified. But Invalid Start and End values are specified. ') } return true } - getHeaders (){ - let headerOptions ={} - headerOptions["x-amz-copy-source"]=encodeURI(this.Bucket+"/"+this.Object) + getHeaders () { + const headerOptions ={} + headerOptions['x-amz-copy-source']=encodeURI(this.Bucket+'/'+this.Object) if (!_.isEmpty(this.VersionID)) { - headerOptions["x-amz-copy-source"]=encodeURI(this.Bucket+"/"+this.Object)+"?versionId="+this.VersionID + headerOptions['x-amz-copy-source']=encodeURI(this.Bucket+'/'+this.Object)+'?versionId='+this.VersionID } if (!_.isEmpty(this.MatchETag)) { - headerOptions["x-amz-copy-source-if-match"]=this.MatchETag + headerOptions['x-amz-copy-source-if-match']=this.MatchETag } if (!_.isEmpty(this.NoMatchETag)) { - headerOptions["x-amz-copy-source-if-none-match"]=this.NoMatchETag + headerOptions['x-amz-copy-source-if-none-match']=this.NoMatchETag } if (!_.isEmpty(this.MatchModifiedSince)) { - headerOptions["x-amz-copy-source-if-modified-since"]= this.MatchModifiedSince + headerOptions['x-amz-copy-source-if-modified-since']= this.MatchModifiedSince } if (!_.isEmpty(this.MatchUnmodifiedSince)) { - headerOptions["x-amz-copy-source-if-unmodified-since"]= this.MatchUnmodifiedSince + headerOptions['x-amz-copy-source-if-unmodified-since']= this.MatchUnmodifiedSince } return headerOptions @@ -585,14 +587,14 @@ export class CopyDestinationOptions { * @param Mode */ constructor({ - Bucket="", - Object="", + Bucket='', + Object='', Encryption=null, UserMetadata=null, UserTags=null, LegalHold = null, RetainUntilDate=null, - Mode=null, // + Mode=null // }) { this.Bucket=Bucket this.Object=Object @@ -604,29 +606,29 @@ export class CopyDestinationOptions { this.RetainUntilDate=RetainUntilDate } - getHeaders (){ - const replaceDirective = "REPLACE" + getHeaders () { + const replaceDirective = 'REPLACE' const headerOptions ={} const userTags= this.UserTags if (!_.isEmpty(userTags)) { - headerOptions["X-Amz-Tagging-Directive"]=replaceDirective - headerOptions["X-Amz-Tagging"]=isObject(userTags)? querystring.stringify(userTags):isString(userTags)?userTags:"" + headerOptions['X-Amz-Tagging-Directive']=replaceDirective + headerOptions['X-Amz-Tagging']=isObject(userTags)? querystring.stringify(userTags):isString(userTags)?userTags:'' } if (!_.isEmpty(this.Mode)) { - headerOptions["X-Amz-Object-Lock-Mode"]=this.Mode // GOVERNANCE or COMPLIANCE + headerOptions['X-Amz-Object-Lock-Mode']=this.Mode // GOVERNANCE or COMPLIANCE } if (!_.isEmpty(this.RetainUntilDate)) { - headerOptions["X-Amz-Object-Lock-Retain-Until-Date"]=this.RetainUntilDate// needs to be UTC. + headerOptions['X-Amz-Object-Lock-Retain-Until-Date']=this.RetainUntilDate// needs to be UTC. } - if (!_.isEmpty(this.LegalHold) ){ - headerOptions["X-Amz-Object-Lock-Legal-Hold"]= this.LegalHold// ON or OFF + if (!_.isEmpty(this.LegalHold) ) { + headerOptions['X-Amz-Object-Lock-Legal-Hold']= this.LegalHold// ON or OFF } - if(!_.isEmpty(this.UserMetadata)){ + if (!_.isEmpty(this.UserMetadata)) { const headerKeys = Object.keys(this.UserMetadata) headerKeys.forEach((key)=>{ headerOptions[`X-Amz-Meta-${key}`]=this.UserMetadata[key] @@ -634,7 +636,7 @@ export class CopyDestinationOptions { } - if (!_.isEmpty(this.Encryption)){ + if (!_.isEmpty(this.Encryption)) { const encryptionHeaders = getEncryptionHeaders(this.Encryption) Object.keys(encryptionHeaders).forEach((key)=>{ headerOptions[key]=encryptionHeaders[key] @@ -643,30 +645,30 @@ export class CopyDestinationOptions { } return headerOptions } - validate(){ + validate() { if (!isValidBucketName(this.Bucket)) { throw new errors.InvalidBucketNameError('Invalid Destination bucket name: ' + this.Bucket) } if (!isValidObjectName(this.Object)) { throw new errors.InvalidObjectNameError(`Invalid Destination object name: ${this.Object}`) } - if(!_.isEmpty(this.UserMetadata) && !isObject(this.UserMetadata)){ - throw new errors.InvalidObjectNameError(`Destination UserMetadata should be an object with key value pairs`) + if (!_.isEmpty(this.UserMetadata) && !isObject(this.UserMetadata)) { + throw new errors.InvalidObjectNameError('Destination UserMetadata should be an object with key value pairs') } - if(!_.isEmpty(this.Mode) && ![RETENTION_MODES.GOVERNANCE, RETENTION_MODES.COMPLIANCE].includes(this.Mode)){ - throw new errors.InvalidObjectNameError(`Invalid Mode specified for destination object it should be one of [GOVERNANCE,COMPLIANCE]`) + if (!_.isEmpty(this.Mode) && ![RETENTION_MODES.GOVERNANCE, RETENTION_MODES.COMPLIANCE].includes(this.Mode)) { + throw new errors.InvalidObjectNameError('Invalid Mode specified for destination object it should be one of [GOVERNANCE,COMPLIANCE]') } - if (!_.isEmpty(this.Encryption) && _.isEmpty(this.Encryption) ){ - throw new errors.InvalidObjectNameError(`Invalid Encryption configuration for destination object `) + if (!_.isEmpty(this.Encryption) && _.isEmpty(this.Encryption) ) { + throw new errors.InvalidObjectNameError('Invalid Encryption configuration for destination object ') } return true } } -export const partsRequired= (size) =>{ - let maxPartSize =PART_CONSTRAINTS.MAX_MULTIPART_PUT_OBJECT_SIZE/ (PART_CONSTRAINTS.MAX_PARTS_COUNT - 1) +export const partsRequired= (size) =>{ + const maxPartSize =PART_CONSTRAINTS.MAX_MULTIPART_PUT_OBJECT_SIZE/ (PART_CONSTRAINTS.MAX_PARTS_COUNT - 1) let requiredPartSize = size /maxPartSize if ((size % maxPartSize) >0) { requiredPartSize++ @@ -682,7 +684,7 @@ export const partsRequired= (size) =>{ let startIndexParts = [] let endIndexParts = [] -export function calculateEvenSplits(size , objInfo) { +export function calculateEvenSplits(size, objInfo) { if (size === 0) { return null } @@ -691,7 +693,7 @@ export function calculateEvenSplits(size , objInfo) { endIndexParts = new Array(reqParts) let start = objInfo.Start - if (_.isEmpty( objInfo.Start) || start === -1 ){ + if (_.isEmpty( objInfo.Start) || start === -1 ) { start = 0 } const divisorValue= Math.trunc(size/reqParts) @@ -700,14 +702,14 @@ export function calculateEvenSplits(size , objInfo) { let nextStart = start - for (let i =0; i < reqParts; i++ ){ + for (let i =0; i < reqParts; i++ ) { let curPartSize= divisorValue - if (i < reminderValue ){ + if (i < reminderValue ) { curPartSize++ } const currentStart =nextStart - let currentEnd = currentStart + curPartSize - 1 + const currentEnd = currentStart + curPartSize - 1 nextStart = currentEnd + 1 startIndexParts[i]= currentStart @@ -724,10 +726,10 @@ export function removeDirAndFiles(dirPath, removeSelf) { if (removeSelf === undefined) removeSelf = true try { var files = fs.readdirSync(dirPath) } - catch(e) { return } + catch (e) { return } if (files.length > 0) - for (var i = 0; i < files.length; i++) { - var filePath = path.join(dirPath, files[i]) + for (let i = 0; i < files.length; i++) { + const filePath = path.join(dirPath, files[i]) if (fs.statSync(filePath).isFile()) fs.unlinkSync(filePath) else @@ -737,7 +739,7 @@ export function removeDirAndFiles(dirPath, removeSelf) { fs.rmdirSync(dirPath) } -export const parseXml = (xml) => { +export const parseXml = (xml) => { let result = null result = fxp.parse(xml) if (result.Error) { @@ -750,7 +752,7 @@ export const parseXml = (xml) => { export class SelectResults { constructor({ records, // parsed data as stream - response,// original response stream + response, // original response stream stats, // stats as xml progress // stats as xml }) { @@ -761,32 +763,32 @@ export class SelectResults { this.progress = progress } - setStats(stats){ + setStats(stats) { this.stats = stats } getStats () { return this.stats } - setProgress(progress){ + setProgress(progress) { this.progress = progress } - getProgress (){ + getProgress () { return this.progress } - setResponse(response){ + setResponse(response) { this.response = response } - getResponse (){ + getResponse () { return this.response } - setRecords(records){ + setRecords(records) { this.records = records } - getRecords(){ + getRecords() { return this.records } diff --git a/src/main/internals/buffer-crc32.ts b/src/main/internals/buffer-crc32.ts new file mode 100644 index 00000000..8d04f74a --- /dev/null +++ b/src/main/internals/buffer-crc32.ts @@ -0,0 +1,115 @@ +import { Buffer } from 'buffer' + +let CRC_TABLE: Int32Array | number[] = [ + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d +] + +if (typeof Int32Array !== 'undefined') { + CRC_TABLE = new Int32Array(CRC_TABLE) +} + +function newEmptyBuffer(length: number) { + const buffer = Buffer.alloc(length) + buffer.fill(0x00) + return buffer +} + +function ensureBuffer(input: Buffer | string | number) { + if (Buffer.isBuffer(input)) { + return input + } + + const hasNewBufferAPI = + typeof Buffer.alloc === 'function' && + typeof Buffer.from === 'function' + + if (typeof input === 'number') { + return hasNewBufferAPI ? Buffer.alloc(input) : newEmptyBuffer(input) + } else if (typeof input === 'string') { + return hasNewBufferAPI ? Buffer.from(input) : new Buffer(input) + } else { + throw new Error('input must be buffer, number, or string, received ' + + typeof input) + } +} + +function bufferizeInt(num: number) { + const tmp = ensureBuffer(4) + tmp.writeInt32BE(num, 0) + return tmp +} + +function _crc32(buf: string | Buffer, previous?: Buffer | number): number { + buf = ensureBuffer(buf) + if (Buffer.isBuffer(previous)) { + previous = previous.readUInt32BE(0) + } + let crc = ~~previous ^ -1 + for (let n = 0; n < buf.length; n++) { + crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8) + } + return crc ^ -1 +} + +function crc32() { + return bufferizeInt(_crc32.apply(null, arguments)) +} +crc32.signed = function () { + return _crc32.apply(null, arguments) +} +crc32.unsigned = function () { + return _crc32.apply(null, arguments) >>> 0 +} + +export default crc32 \ No newline at end of file diff --git a/src/main/internals/lodash.ts b/src/main/internals/lodash.ts new file mode 100644 index 00000000..7168028b --- /dev/null +++ b/src/main/internals/lodash.ts @@ -0,0 +1,70 @@ +// export function isEmpty(obj: unknown): boolean { +// if (obj === undefined || obj === null) { +// return true +// } + +// if (typeof obj === 'object') { +// return [Object, Array].includes(obj.constructor ) && !Object.entries(obj || {}).length +// } +// } + +/** Used to check objects for own properties. */ +const hasOwnProperty = Object.prototype.hasOwnProperty + +/** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * isEmpty(null) + * // => true + * + * isEmpty(true) + * // => true + * + * isEmpty(1) + * // => true + * + * isEmpty([1, 2, 3]) + * // => false + * + * isEmpty('abc') + * // => false + * + * isEmpty({ 'a': 1 }) + * // => false + */ +function isEmpty(value: unknown): boolean { + if (value == null) { + return true + } + if (isArrayLike(value) && + (Array.isArray(value) || typeof value === 'string' || typeof value.splice === 'function' || + Buffer.isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length + } + const tag = getTag(value) + if (tag == '[object Map]' || tag == '[object Set]') { + return !value.size + } + if (isPrototype(value)) { + return !Object.keys(value).length + } + for (const key in value) { + if (hasOwnProperty.call(value, key)) { + return false + } + } + return true +} diff --git a/src/main/minio.js b/src/main/minio.ts similarity index 70% rename from src/main/minio.js rename to src/main/minio.ts index a3aff1dd..0f5d0926 100644 --- a/src/main/minio.js +++ b/src/main/minio.ts @@ -17,16 +17,15 @@ import fs from 'fs' import Http from 'http' import Https from 'https' -import Stream from 'stream' +import Stream, { Writable } from 'stream' import BlockStream2 from 'block-stream2' import Xml from 'xml' import xml2js from 'xml2js' import async from 'async' import querystring from 'query-string' -import mkdirp from 'mkdirp' import path from 'path' import _ from 'lodash' -import { TextEncoder } from "web-encoding" +import { TextEncoder } from 'web-encoding' import { extractMetadata, prependXAMZMeta, isValidPrefix, isValidEndpoint, isValidBucketName, @@ -41,7 +40,8 @@ import { PART_CONSTRAINTS, partsRequired, calculateEvenSplits, - DEFAULT_REGION + DEFAULT_REGION, + SelectResults } from './helpers.js' import { signV4, presignSignatureV4, postPresignSignatureV4 } from './signing.js' @@ -57,14 +57,94 @@ import { getS3Endpoint } from './s3-endpoints.js' import { NotificationConfig, NotificationPoller } from './notification' import extensions from './extensions' -import CredentialProvider from "./CredentialProvider" +import CredentialProvider from './CredentialProvider' -import { parseSelectObjectContentResponse} from "./xml-parsers" +import { parseSelectObjectContentResponse} from './xml-parsers' +import { Transport } from './transport.js' +import { MakeBucketOptions } from './types/bucket-options.js' +import { MakeRequestOptions } from './types/request-options.js' +import { GetObjectOptions } from './types/get-object-options.js' +import { CopyObjectV1Response } from './types/copy-object-options.js' +import { CopyConditions } from './copy-conditions.js' +import { ListQueryOptions } from './types/list-query-options.js' -var Package = require('../../package.json') +const Package = require('../../package.json') + +export type ClientOptions = { + /** + * @deprecated Use 'useSSL' instead + */ + secure?: boolean, + /** + * If set to true, https is used instead of http. Default is true. + */ + useSSL?: boolean, + /** + * TCP/IP port number. This input is optional. + * Default value set to 80 for HTTP and 443 for HTTPs. + */ + port: number, + /** + * endPoint is a host name or an IP address. + */ + endPoint: string, + /** + * Set this value to override region cache. (Optional) + */ + region?: string, + /** + * Set this value to pass in a custom transport. (Optional) + */ + transport?: Transport, + /** + * accessKey is like user-id that uniquely identifies your account. + */ + accessKey: string, + /** + * secretKey is the password to your account. + */ + secretKey: string, + /** + * Set this value to provide x-amz-security-token (AWS S3 specific). + */ + sessionToken?: string, + /** + * Set this value to override default access behavior (path) for non AWS endpoints. Default is true. (Optional) + */ + pathStyle?: boolean, + credentialsProvider?: CredentialProvider, + /** + * Set this value to override default part size of 64MB for multipart uploads. (Optional) + */ + partSize?: number, + s3AccelerateEndpoint?: string +} export class Client { - constructor(params) { + private readonly transport: Transport + private readonly host: string + private readonly port: number + private readonly protocol: string + private readonly accessKey: string + private readonly secretKey: string + private readonly sessionToken?: string + private userAgent: string + private readonly pathStyle: boolean + private readonly anonymous: boolean + private readonly credentialsProvider?: CredentialProvider + private readonly region?: string + private readonly regionMap: Record + private readonly partSize: number + private readonly overRidePartSize?: boolean + private readonly maximumPartSize: number + private readonly maxObjectSize: number + private readonly enableSHA256: boolean + private s3AccelerateEndpoint: string | null + private readonly reqOptions?: object + private logStream?: Writable + + + constructor(params: ClientOptions) { if (typeof params.secure !== 'undefined') throw new Error('"secure" option deprecated, "useSSL" should be used instead') // Default values if not specified. if (typeof params.useSSL === 'undefined') params.useSSL = true @@ -76,21 +156,21 @@ export class Client { if (!isValidPort(params.port)) { throw new errors.InvalidArgumentError(`Invalid port : ${params.port}`) } - if (!isBoolean(params.useSSL)) { + if (!isBoolean(params.useSSL as never)) { throw new errors.InvalidArgumentError(`Invalid useSSL flag type : ${params.useSSL}, expected to be of type "boolean"`) } // Validate region only if its set. - if (params.region) { - if (!isString(params.region)) { + if (params.region != null && params.region !== '') { + if (!isString(params.region as never)) { throw new errors.InvalidArgumentError(`Invalid region : ${params.region}`) } } - var host = params.endPoint.toLowerCase() - var port = params.port - var protocol = '' - var transport + const host = params.endPoint.toLowerCase() + let port = params.port + let protocol = '' + let transport // Validate if configuration is not using SSL // for constructing relevant endpoints. if (params.useSSL === false) { @@ -110,7 +190,7 @@ export class Client { // if custom transport is set, use it. if (params.transport) { - if (!isObject(params.transport)) { + if (!isObject(params.transport as never)) { throw new errors.InvalidArgumentError('Invalid transport type : ${params.transport}, expected to be type "object"') } transport = params.transport @@ -121,8 +201,8 @@ export class Client { // // MinIO (OS; ARCH) LIB/VER APP/VER // - var libraryComments = `(${process.platform}; ${process.arch})` - var libraryAgent = `MinIO ${libraryComments} minio-js/${Package.version}` + const libraryComments = `(${process.platform}; ${process.arch})` + const libraryAgent = `MinIO ${libraryComments} minio-js/${Package.version}` // User agent block ends. this.transport = transport @@ -145,7 +225,7 @@ export class Client { if (!this.secretKey) this.secretKey = '' this.anonymous = !this.accessKey || !this.secretKey - if(params.credentialsProvider) { + if (params.credentialsProvider) { this.credentialsProvider = params.credentialsProvider this.checkAndRefreshCreds() } @@ -161,10 +241,10 @@ export class Client { this.overRidePartSize = true } if (this.partSize < 5*1024*1024) { - throw new errors.InvalidArgumentError(`Part size should be greater than 5MB`) + throw new errors.InvalidArgumentError('Part size should be greater than 5MB') } if (this.partSize > 5*1024*1024*1024) { - throw new errors.InvalidArgumentError(`Part size should be less than 5GB`) + throw new errors.InvalidArgumentError('Part size should be less than 5GB') } this.maximumPartSize = 5*1024*1024*1024 @@ -174,16 +254,16 @@ export class Client { // header for signature calculation. this.enableSHA256 = !this.anonymous && !params.useSSL - this.s3AccelerateEndpoint = ( params.s3AccelerateEndpoint || null ) + this.s3AccelerateEndpoint = params.s3AccelerateEndpoint || null this.reqOptions = {} } // This is s3 Specific and does not hold validity in any other Object storage. - getAccelerateEndPointIfSet(bucketName, objectName){ - if (!_.isEmpty(this.s3AccelerateEndpoint) && !_.isEmpty(bucketName) && !_.isEmpty(objectName) ) { + getAccelerateEndPointIfSet(bucketName: string, objectName: string) { + if (this.s3AccelerateEndpoint !== null && this.s3AccelerateEndpoint !== '' && bucketName != null && bucketName !== '' && objectName != null && objectName !== '') { // http://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html // Disable transfer acceleration for non-compliant bucket names. - if (bucketName.indexOf(".")!== -1) { + if (bucketName.indexOf('.')!== -1) { throw new Error(`Transfer Acceleration is not supported for non compliant bucket:${bucketName}`) } // If transfer acceleration is requested set new host. @@ -191,19 +271,19 @@ export class Client { // http://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html return this.s3AccelerateEndpoint } - return false + return false } /** * @param endPoint _string_ valid S3 acceleration end point */ - setS3TransferAccelerate(endPoint){ + setS3TransferAccelerate(endPoint: string) { this.s3AccelerateEndpoint = endPoint } // Sets the supported request options. - setRequestOptions(options) { - if (!isObject(options)) { + setRequestOptions(options: Record) { + if (!isObject(options as never)) { throw new TypeError('request options should be of type "object"') } this.reqOptions = _.pick(options, ['agent', 'ca', 'cert', 'ciphers', 'clientCertEngine', 'crl', 'dhparam', 'ecdhCurve', 'family', 'honorCipherOrder', 'key', 'passphrase', 'pfx', 'rejectUnauthorized', 'secureOptions', 'secureProtocol', 'servername', 'sessionIdContext']) @@ -211,19 +291,19 @@ export class Client { // returns *options* object that can be used with http.request() // Takes care of constructing virtual-host-style or path-style hostname - getRequestOptions(opts) { - var method = opts.method - var region = opts.region - var bucketName = opts.bucketName - var objectName = opts.objectName - var headers = opts.headers - var query = opts.query - - var reqOptions = {method} + getRequestOptions(opts: MakeRequestOptions) { + const method = opts.method + const region = opts.region + const bucketName = opts.bucketName + let objectName = opts.objectName + let headers = opts.headers + const query = opts.query + + let reqOptions: Http.RequestOptions = {method} reqOptions.headers = {} // Verify if virtual host supported. - var virtualHostStyle + let virtualHostStyle if (bucketName) { virtualHostStyle = isVirtualHostStyle(this.host, this.protocol, bucketName, this.pathStyle) } @@ -244,7 +324,7 @@ export class Client { const accelerateEndPoint = this.getAccelerateEndPointIfSet(bucketName, objectName) if (accelerateEndPoint ) { reqOptions.host = `${accelerateEndPoint}` - }else { + } else { reqOptions.host = getS3Endpoint(region) } } @@ -274,7 +354,7 @@ export class Client { reqOptions.headers['user-agent'] = this.userAgent if (headers) { // have all header keys in lower case - to make signing easy - _.map(headers, (v, k) => reqOptions.headers[k.toLowerCase()] = v) + headers = Object.entries(headers).map((v: string, k: unknown) => reqOptions.headers[k.toLowerCase()] = v) } // Use any request option specified in minioClient.setRequestOptions() @@ -292,14 +372,14 @@ export class Client { // __Arguments__ // * `appName` _string_ - Application name. // * `appVersion` _string_ - Application version. - setAppInfo(appName, appVersion) { - if (!isString(appName)) { + setAppInfo(appName: string, appVersion: string) { + if (!isString(appName as never)) { throw new TypeError(`Invalid appName: ${appName}`) } if (appName.trim() === '') { throw new errors.InvalidArgumentError('Input appName cannot be empty.') } - if (!isString(appVersion)) { + if (!isString(appVersion as never)) { throw new TypeError(`Invalid appVersion: ${appVersion}`) } if (appVersion.trim() === '') { @@ -309,8 +389,8 @@ export class Client { } // Calculate part size given the object size. Part size will be atleast this.partSize - calculatePartSize(size) { - if (!isNumber(size)) { + calculatePartSize(size: number): number { + if (!isNumber(size as never)) { throw new TypeError('size should be of type "number"') } if (size > this.maxObjectSize) { @@ -319,7 +399,7 @@ export class Client { if (this.overRidePartSize) { return this.partSize } - var partSize = this.partSize + let partSize = this.partSize for (;;) { // while(true) {...} throws linting error. // If partSize is big enough to accomodate the object size, then use it. if ((partSize * 10000) > size) { @@ -331,26 +411,29 @@ export class Client { } // log the request, response, error - logHTTP(reqOptions, response, err) { + logHTTP(reqOptions: { method: any; path?: any; headers?: any }, response?: Record | null, err?: any) { // if no logstreamer available return. - if (!this.logStream) return - if (!isObject(reqOptions)) { + if (this.logStream === undefined) return + if (!isObject(reqOptions as never)) { throw new TypeError('reqOptions should be of type "object"') } - if (response && !isReadableStream(response)) { + if (response && !isReadableStream(response as never)) { throw new TypeError('response should be of type "Stream"') } if (err && !(err instanceof Error)) { throw new TypeError('err should be of type "Error"') } - var logHeaders = (headers) => { - _.forEach(headers, (v, k) => { + const logHeaders = (headers: Record) => { + if (this.logStream === undefined) return + Object.entries(headers).forEach(([v, k]) => { + if (this.logStream === undefined) return if (k == 'authorization') { - var redacter = new RegExp('Signature=([0-9a-f]+)') + const redacter = new RegExp('Signature=([0-9a-f]+)') v = v.replace(redacter, 'Signature=**REDACTED**') } this.logStream.write(`${k}: ${v}\n`) }) + this.logStream.write('\n') } this.logStream.write(`REQUEST: ${reqOptions.method} ${reqOptions.path}\n`) @@ -361,20 +444,20 @@ export class Client { } if (err) { this.logStream.write('ERROR BODY:\n') - var errJSON = JSON.stringify(err, null, '\t') + const errJSON = JSON.stringify(err, null, '\t') this.logStream.write(`${errJSON}\n`) } } // Enable tracing - traceOn(stream) { + traceOn(stream?: Writable) { if (!stream) stream = process.stdout this.logStream = stream } // Disable tracing traceOff() { - this.logStream = null + this.logStream = undefined } // makeRequest is the primitive used by the apis for making S3 requests. @@ -383,83 +466,83 @@ export class Client { // we parse the XML error and call the callback with the error message. // A valid region is passed by the calls - listBuckets, makeBucket and // getBucketRegion. - makeRequest(options, payload, statusCodes, region, returnResponse, cb) { - if (!isObject(options)) { + makeRequest(options: MakeRequestOptions, payload: string | Buffer, statusCodes: number[], region: string, returnResponse: boolean, callback: (err: Error | null, response?: Http.IncomingMessage) => void) { + if (!isObject(options as never)) { throw new TypeError('options should be of type "object"') } - if (!isString(payload) && !isObject(payload)) { + if (!isString(payload as never) && !isObject(payload as never)) { // Buffer is of type 'object' throw new TypeError('payload should be of type "string" or "Buffer"') } statusCodes.forEach(statusCode => { - if (!isNumber(statusCode)) { + if (!isNumber(statusCode as never)) { throw new TypeError('statusCode should be of type "number"') } }) - if (!isString(region)) { + if (!isString(region as never)) { throw new TypeError('region should be of type "string"') } - if (!isBoolean(returnResponse)) { + if (!isBoolean(returnResponse as never)) { throw new TypeError('returnResponse should be of type "boolean"') } - if(!isFunction(cb)) { + if (!isFunction(callback as never)) { throw new TypeError('callback should be of type "function"') } if (!options.headers) options.headers = {} if (options.method === 'POST' || options.method === 'PUT' || options.method === 'DELETE') { options.headers['content-length'] = payload.length } - var sha256sum = '' + let sha256sum = '' if (this.enableSHA256) sha256sum = toSha256(payload) - var stream = readableStream(payload) - this.makeRequestStream(options, stream, sha256sum, statusCodes, region, returnResponse, cb) + const stream = readableStream(payload) + this.makeRequestStream(options, stream, sha256sum, statusCodes, region, returnResponse, callback) } // makeRequestStream will be used directly instead of makeRequest in case the payload // is available as a stream. for ex. putObject - makeRequestStream(options, stream, sha256sum, statusCodes, region, returnResponse, cb) { - if (!isObject(options)) { + makeRequestStream(options: MakeRequestOptions, stream: Stream.Readable, sha256sum: string, statusCodes: number[], region: string, returnResponse: boolean, cb: (err: Error | null, response?: Http.IncomingMessage) => void) { + if (!isObject(options as never)) { throw new TypeError('options should be of type "object"') } - if (!isReadableStream(stream)) { + if (!isReadableStream(stream as never)) { throw new errors.InvalidArgumentError('stream should be a readable Stream') } - if (!isString(sha256sum)) { + if (!isString(sha256sum as never)) { throw new TypeError('sha256sum should be of type "string"') } statusCodes.forEach(statusCode => { - if (!isNumber(statusCode)) { + if (!isNumber(statusCode as never)) { throw new TypeError('statusCode should be of type "number"') } }) - if (!isString(region)) { + if (!isString(region as never)) { throw new TypeError('region should be of type "string"') } - if (!isBoolean(returnResponse)) { + if (!isBoolean(returnResponse as never)) { throw new TypeError('returnResponse should be of type "boolean"') } - if(!isFunction(cb)) { + if (!isFunction(cb as never)) { throw new TypeError('callback should be of type "function"') } // sha256sum will be empty for anonymous or https requests if (!this.enableSHA256 && sha256sum.length !== 0) { - throw new errors.InvalidArgumentError(`sha256sum expected to be empty for anonymous or https requests`) + throw new errors.InvalidArgumentError('sha256sum expected to be empty for anonymous or https requests') } // sha256sum should be valid for non-anonymous http requests. if (this.enableSHA256 && sha256sum.length !== 64) { throw new errors.InvalidArgumentError(`Invalid sha256sum : ${sha256sum}`) } - var _makeRequest = (e, region) => { + const _makeRequest = (e: Error | null, region?: string) => { if (e) return cb(e) options.region = region - var reqOptions = this.getRequestOptions(options) + const reqOptions = this.getRequestOptions(options) if (!this.anonymous) { // For non-anonymous https requests sha256sum is 'UNSIGNED-PAYLOAD' for signature calculation. if (!this.enableSHA256) sha256sum = 'UNSIGNED-PAYLOAD' - let date = new Date() + const date = new Date() reqOptions.headers['x-amz-date'] = makeDateLong(date) reqOptions.headers['x-amz-content-sha256'] = sha256sum @@ -468,32 +551,40 @@ export class Client { } this.checkAndRefreshCreds() - var authorization = signV4(reqOptions, this.accessKey, this.secretKey, region, date) + const authorization = signV4(reqOptions, this.accessKey, this.secretKey, region, date) reqOptions.headers.authorization = authorization } - var req = this.transport.request(reqOptions, response => { - if (!statusCodes.includes(response.statusCode)) { - // For an incorrect region, S3 server always sends back 400. - // But we will do cache invalidation for all errors so that, - // in future, if AWS S3 decides to send a different status code or - // XML error code we will still work fine. - delete(this.regionMap[options.bucketName]) - var errorTransformer = transformers.getErrorTransformer(response) - pipesetup(response, errorTransformer) - .on('error', e => { - this.logHTTP(reqOptions, response, e) - cb(e) - }) - return + const req = this.transport.request(reqOptions, response => { + if (response != null) { + if (response?.statusCode !== undefined && !statusCodes.includes(response?.statusCode)) { + // For an incorrect region, S3 server always sends back 400. + // But we will do cache invalidation for all errors so that, + // in future, if AWS S3 decides to send a different status code or + // XML error code we will still work fine. + if (options.bucketName != null) { + delete this.regionMap[options.bucketName] + } + + const errorTransformer = transformers.getErrorTransformer(response) + pipesetup(response, errorTransformer) + .on('error', e => { + this.logHTTP(reqOptions, response, e) + cb(e) + }) + return + } + this.logHTTP(reqOptions, response) + if (returnResponse) return cb(null, response) + // We drain the socket so that the connection gets closed. Note that this + // is not expensive as the socket will not have any data. + response.on('data', () => { + // do nothing + }) + + cb(null) } - this.logHTTP(reqOptions, response) - if (returnResponse) return cb(null, response) - // We drain the socket so that the connection gets closed. Note that this - // is not expensive as the socket will not have any data. - response.on('data', ()=>{}) - cb(null) }) - let pipe = pipesetup(stream, req) + const pipe = pipesetup(stream, req) pipe.on('error', e => { this.logHTTP(reqOptions, null, e) cb(e) @@ -504,34 +595,34 @@ export class Client { } // gets the region of the bucket - getBucketRegion(bucketName, cb) { + getBucketRegion(bucketName: string, callback: (err: Error | null, region?: string) => void) { if (!isValidBucketName(bucketName)) { - throw new errors.InvalidBucketNameError(`Invalid bucket name : ${bucketName}`) + throw new errors.InvalidBucketNameError(`Invalid bucket name: ${bucketName}`) } - if (!isFunction(cb)) { - throw new TypeError('cb should be of type "function"') + if (!isFunction(callback as never)) { + throw new TypeError('callback should be of type "function"') } // Region is set with constructor, return the region right here. - if (this.region) return cb(null, this.region) + if (this.region) return callback(null, this.region) - if (this.regionMap[bucketName]) return cb(null, this.regionMap[bucketName]) - var extractRegion = (response) => { - var transformer = transformers.getBucketRegionTransformer() - var region = DEFAULT_REGION + if (this.regionMap[bucketName]) return callback(null, this.regionMap[bucketName]) + const extractRegion = (response: Http.IncomingMessage) => { + const transformer = transformers.getBucketRegionTransformer() + let region = DEFAULT_REGION pipesetup(response, transformer) - .on('error', cb) + .on('error', callback) .on('data', data => { if (data) region = data }) .on('end', () => { this.regionMap[bucketName] = region - cb(null, region) + callback(null, region) }) } - var method = 'GET' - var query = 'location' + const method = 'GET' + const query = 'location' // `getBucketLocation` behaves differently in following ways for // different environments. @@ -544,21 +635,24 @@ export class Client { // the error XML also provides Region of the bucket. To validate // this region is proper we retry the same request with the newly // obtained region. - var pathStyle = this.pathStyle && typeof window === 'undefined' + const pathStyle = this.pathStyle && typeof window === 'undefined' - this.makeRequest({method, bucketName, query, pathStyle}, '', [200], DEFAULT_REGION, true, (e, response) => { + this.makeRequest({method, bucketName, query, pathStyle}, '', [200], DEFAULT_REGION, true, (e?: Error | null, response?: Http.IncomingMessage) => { if (e) { if (e.name === 'AuthorizationHeaderMalformed') { - var region = e.Region - if (!region) return cb(e) - this.makeRequest({method, bucketName, query}, '', [200], region, true, (e, response) => { - if (e) return cb(e) + const region = e.Region + if (!region) return callback(e) + this.makeRequest({method, bucketName, query}, '', [200], region, true, (e?: Error | null, response?: Http.IncomingMessage) => { + if (e) return callback(e) + if (response == null) return callback(new errors.MisbehavingServerError('Expecting a Http.IncomingMessage response stream, got undefined')) extractRegion(response) }) return } - return cb(e) + return callback(e) } + + if (response == null) return callback(new errors.MisbehavingServerError('Expecting a Http.IncomingMessage response stream, got undefined')) extractRegion(response) }) } @@ -570,37 +664,30 @@ export class Client { // * `region` _string_ - region valid values are _us-west-1_, _us-west-2_, _eu-west-1_, _eu-central-1_, _ap-southeast-1_, _ap-northeast-1_, _ap-southeast-2_, _sa-east-1_. // * `makeOpts` _object_ - Options to create a bucket. e.g {ObjectLocking:true} (Optional) // * `callback(err)` _function_ - callback function with `err` as the error argument. `err` is null if the bucket is successfully created. - makeBucket(bucketName, region, makeOpts={}, cb) { + makeBucket(bucketName: string, callback: (err?: Error) => void): void + makeBucket(bucketName: string, region: string, callback: (err?: Error) => void): void + makeBucket(bucketName: string, region: string, makeOpts: MakeBucketOptions, callback: (err?: Error) => void): void + makeBucket(bucketName: string, ...rest: [(err?: Error) => void] | [string, (err?: Error) => void] | [string, MakeBucketOptions, (err?: Error) => void]): void { + const [callback, makeOpts, region] = + rest.length === 1 ? [rest[0], undefined, DEFAULT_REGION] : + rest.length === 2 ? [rest[1], undefined, rest[0] ?? DEFAULT_REGION] : + [rest[2], rest[1], rest[0] ?? DEFAULT_REGION] + if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } - // Backward Compatibility - if(isObject(region)){ - cb= makeOpts - makeOpts=region - region = '' - } - if (isFunction(region)) { - cb = region - region = '' - makeOpts={} - } - if(isFunction(makeOpts)){ - cb=makeOpts - makeOpts={} - } - if (!isString(region)) { + if (region != null && !isString(region as never)) { throw new TypeError('region should be of type "string"') } - if (!isObject(makeOpts)) { + if (makeOpts != null && !isObject(makeOpts as never)) { throw new TypeError('makeOpts should be of type "object"') } - if (!isFunction(cb)) { + if (callback != null && !isFunction(callback as never)) { throw new TypeError('callback should be of type "function"') } - var payload = '' + let payload = '' // Region already set in constructor, validate if // caller requested bucket location is same. @@ -612,7 +699,7 @@ export class Client { // sending makeBucket request with XML containing 'us-east-1' fails. For // default region server expects the request without body if (region && region !== DEFAULT_REGION) { - var createBucketConfiguration = [] + const createBucketConfiguration = [] createBucketConfiguration.push({ _attr: { xmlns: 'http://s3.amazonaws.com/doc/2006-03-01/' @@ -621,31 +708,30 @@ export class Client { createBucketConfiguration.push({ LocationConstraint: region }) - var payloadObject = { + const payloadObject = { CreateBucketConfiguration: createBucketConfiguration } payload = Xml(payloadObject) } - var method = 'PUT' - var headers = {} + const method = 'PUT' + const headers = {} - if(makeOpts.ObjectLocking){ - headers["x-amz-bucket-object-lock-enabled"]=true + if (makeOpts?.ObjectLocking) { + headers['x-amz-bucket-object-lock-enabled']=true } - if (!region) region = DEFAULT_REGION - - const processWithRetry = (err) =>{ - if (err && (region === "" || region === DEFAULT_REGION)) { - if(err.code === "AuthorizationHeaderMalformed" && err.region !== ""){ + const processWithRetry = (err?: Error) =>{ + if (err && (region === '' || region === DEFAULT_REGION)) { + if (err.code === 'AuthorizationHeaderMalformed' && err.region !== '') { // Retry with region returned as part of error this.makeRequest({method, bucketName, headers}, payload, [200], err.region, false, cb) } else { - return cb && cb(err) + return cb?.(err) } } - return cb && cb(err) + return cb?.(err) } + this.makeRequest({method, bucketName, headers}, payload, [200], region, false, processWithRetry) } @@ -657,19 +743,21 @@ export class Client { // `buckets` array element: // * `bucket.name` _string_ : bucket name // * `bucket.creationDate` _Date_: date when bucket was created - listBuckets(cb) { - if (!isFunction(cb)) { + listBuckets(callback: (err?: Error | null, buckets?: Bucket[]) => void): void { + if (!isFunction(callback as never)) { throw new TypeError('callback should be of type "function"') } - var method = 'GET' + const method = 'GET' this.makeRequest({method}, '', [200], DEFAULT_REGION, true, (e, response) => { - if (e) return cb(e) - var transformer = transformers.getListBucketTransformer() - var buckets + if (e) return callback(e) + if (response == null) return callback(new errors.MisbehavingServerError('Expecting a Http.IncomingMessage response stream, got undefined')) + + const transformer = transformers.getListBucketTransformer() + let buckets: Bucket[] = [] pipesetup(response, transformer) .on('data', result => buckets = result) - .on('error', e => cb(e)) - .on('end', () => cb(null, buckets)) + .on('error', e => callback(e)) + .on('end', () => callback(null, buckets)) }) } @@ -685,43 +773,43 @@ export class Client { // * `object.key` _string_: name of the object // * `object.uploadId` _string_: upload ID of the object // * `object.size` _Integer_: size of the partially uploaded object - listIncompleteUploads(bucket, prefix, recursive) { + listIncompleteUploads(bucketName: string, prefix = '', recursive = false): Stream.Readable { if (prefix === undefined) prefix = '' if (recursive === undefined) recursive = false - if (!isValidBucketName(bucket)) { - throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucket) + if (!isValidBucketName(bucketName)) { + throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } if (!isValidPrefix(prefix)) { - throw new errors.InvalidPrefixError(`Invalid prefix : ${prefix}`) + throw new errors.InvalidPrefixError(`Invalid prefix: ${prefix}`) } - if (!isBoolean(recursive)) { + if (!isBoolean(recursive as never)) { throw new TypeError('recursive should be of type "boolean"') } - var delimiter = recursive ? '' : '/' - var keyMarker = '' - var uploadIdMarker = '' - var uploads = [] - var ended = false - var readStream = Stream.Readable({objectMode: true}) + const delimiter = recursive ? '' : '/' + let keyMarker = '' + let uploadIdMarker = '' + const uploads: any[] = [] + let ended = false + const readStream = new Stream.Readable({objectMode: true}) readStream._read = () => { // push one upload info per _read() if (uploads.length) { return readStream.push(uploads.shift()) } if (ended) return readStream.push(null) - this.listIncompleteUploadsQuery(bucket, prefix, keyMarker, uploadIdMarker, delimiter) - .on('error', e => readStream.emit('error', e)) - .on('data', result => { - result.prefixes.forEach(prefix => uploads.push(prefix)) - async.eachSeries(result.uploads, (upload, cb) => { + this.listIncompleteUploadsQuery(bucketName, prefix, keyMarker, uploadIdMarker, delimiter) + .on('error', (e: any) => readStream.emit('error', e)) + .on('data', (result: { prefixes: any[]; uploads: any; isTruncated: any; nextKeyMarker: string; nextUploadIdMarker: string }) => { + result.prefixes.forEach((prefix: any) => uploads.push(prefix)) + async.eachSeries(result.uploads, (upload: { key: any; uploadId: any; size: any }, cb: (arg0: undefined) => void) => { // for each incomplete upload add the sizes of its uploaded parts - this.listParts(bucket, upload.key, upload.uploadId, (err, parts) => { + this.listParts(bucketName, upload.key, upload.uploadId, (err: any, parts: any[]) => { if (err) return cb(err) - upload.size = parts.reduce((acc, item) => acc + item.size, 0) + upload.size = parts.reduce((acc: any, item: { size: any }) => acc + item.size, 0) uploads.push(upload) cb() }) - }, err => { + }, (err: any) => { if (err) { readStream.emit('error', err) return @@ -732,7 +820,7 @@ export class Client { } else { ended = true } - readStream._read() + readStream.read() }) }) } @@ -744,20 +832,20 @@ export class Client { // __Arguments__ // * `bucketName` _string_ : name of the bucket // * `callback(err)` _function_ : `err` is `null` if the bucket exists - bucketExists(bucketName, cb) { + bucketExists(bucketName: string, callback: (err: Error | null, exists?: boolean) => void): void { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } - if (!isFunction(cb)) { + if (!isFunction(callback as never)) { throw new TypeError('callback should be of type "function"') } - var method = 'HEAD' - this.makeRequest({method, bucketName}, '', [200], '', false, err => { + const method = 'HEAD' + this.makeRequest({method, bucketName}, '', [200], '', false, (err) => { if (err) { - if (err.code == 'NoSuchBucket' || err.code == 'NotFound') return cb(null, false) - return cb(err) + if (err?.code === 'NoSuchBucket' || err?.code === 'NotFound') return callback(null, false) + return callback(err) } - cb(null, true) + callback(null, true) }) } @@ -766,18 +854,18 @@ export class Client { // __Arguments__ // * `bucketName` _string_ : name of the bucket // * `callback(err)` _function_ : `err` is `null` if the bucket is removed successfully. - removeBucket(bucketName, cb) { + removeBucket(bucketName: string, callback: (err: Error | null) => void): void { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } - if (!isFunction(cb)) { + if (!isFunction(callback as never)) { throw new TypeError('callback should be of type "function"') } - var method = 'DELETE' + const method = 'DELETE' this.makeRequest({method, bucketName}, '', [204], '', false, (e) => { // If the bucket was successfully removed, remove the region map entry. - if (!e) delete(this.regionMap[bucketName]) - cb(e) + if (!e) delete this.regionMap[bucketName] + callback(e) }) } @@ -787,32 +875,24 @@ export class Client { // * `bucketName` _string_: name of the bucket // * `objectName` _string_: name of the object // * `callback(err)` _function_: callback function is called with non `null` value in case of error - removeIncompleteUpload(bucketName, objectName, cb) { + removeIncompleteUpload(bucketName: string, objectName: string, callback: (err: Error | null) => void): void { if (!isValidBucketName(bucketName)) { - throw new errors.isValidBucketNameError('Invalid bucket name: ' + bucketName) + throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } if (!isValidObjectName(objectName)) { throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`) } - if (!isFunction(cb)) { + if (!isFunction(callback as never)) { throw new TypeError('callback should be of type "function"') } - var removeUploadId - async.during( - cb => { - this.findUploadId(bucketName, objectName, (e, uploadId) => { - if (e) return cb(e) - removeUploadId = uploadId - cb(null, uploadId) - }) - }, - cb => { - var method = 'DELETE' - var query = `uploadId=${removeUploadId}` - this.makeRequest({method, bucketName, objectName, query}, '', [204], '', false, e => cb(e)) - }, - cb - ) + + this.findUploadId(bucketName, objectName, (e: Error | null, uploadId?: string) => { + if (e) return callback(e) + if (uploadId == null) return callback(new errors.MisbehavingServerError('Expecting a response, instead got undefined uploadId')) + const method = 'DELETE' + const query = `uploadId=${uploadId}` + this.makeRequest({method, bucketName, objectName, query}, '', [204], '', false, e => callback(e)) + }) } // Callback is called with `error` in case of error or `null` in case of success @@ -823,7 +903,13 @@ export class Client { // * `filePath` _string_: path to which the object data will be written to // * `getOpts` _object_: Version of the object in the form `{versionId:'my-uuid'}`. Default is `{}`. (optional) // * `callback(err)` _function_: callback is called with `err` in case of error. - fGetObject(bucketName, objectName, filePath, getOpts={}, cb) { + fGetObject(bucketName: string, objectName: string, filePath: string, callback: (err: Error | null) => void): void + fGetObject(bucketName: string, objectName: string, filePath: string, getOpts: GetObjectOptions, callback: (err: Error | null) => void): void + fGetObject(bucketName: string, objectName: string, filePath: string, ...rest: [(err: Error | null) => void] | [GetObjectOptions, (err: Error | null) => void]): void { + const [callback, getOpts] = + rest.length === 1 ? [rest[0], {}] : + [rest[1], rest[0]] + // Input validation. if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) @@ -831,41 +917,37 @@ export class Client { if (!isValidObjectName(objectName)) { throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`) } - if (!isString(filePath)) { + if (!isString(filePath as never)) { throw new TypeError('filePath should be of type "string"') } - // Backward Compatibility - if (isFunction(getOpts)) { - cb = getOpts - getOpts = {} - } - if (!isFunction(cb)) { + if (!isFunction(callback as never)) { throw new TypeError('callback should be of type "function"') } // Internal data. - var partFile - var partFileStream - var objStat + let partFile: fs.PathLike + let partFileStream: Stream.Stream + let objStat: { etag: any; size: number } // Rename wrapper. - var rename = err => { - if (err) return cb(err) - fs.rename(partFile, filePath, cb) + const rename = (err: Error | null) => { + if (err) return callback(err) + fs.rename(partFile, filePath, callback) } + // TODO: make this into a normal callback without external library async.waterfall([ - cb => this.statObject(bucketName, objectName, getOpts, cb), - (result, cb) => { + ( cb: any) => this.statObject(bucketName, objectName, getOpts, cb), + (result: any, cb: (err: NodeJS.ErrnoException | null, path?: string | undefined) => void) => { objStat = result // Create any missing top level directories. - mkdirp(path.dirname(filePath), cb) + fs.mkdir(path.dirname(filePath), { recursive: true }, cb) }, - (ignore, cb) => { + (ignore: any, cb: any) => { partFile = `${filePath}.${objStat.etag}.part.minio` fs.stat(partFile, (e, stats) => { - var offset = 0 + let offset = 0 if (e) { partFileStream = fs.createWriteStream(partFile, {flags: 'w'}) } else { @@ -876,13 +958,13 @@ export class Client { this.getPartialObject(bucketName, objectName, offset, 0, getOpts, cb) }) }, - (downloadStream, cb) => { + (downloadStream: Stream.Stream, cb: (...args: any[]) => void) => { pipesetup(downloadStream, partFileStream) .on('error', e => cb(e)) .on('finish', cb) }, - cb => fs.stat(partFile, cb), - (stats, cb) => { + ( cb: (err: NodeJS.ErrnoException | null, stats: fs.Stats) => void) => fs.stat(partFile, cb), + (stats: { size: any }, cb: (arg0: Error | undefined) => void) => { if (stats.size === objStat.size) return cb() cb(new Error('Size mismatch between downloaded file and the object')) } @@ -896,23 +978,32 @@ export class Client { // * `objectName` _string_: name of the object // * `getOpts` _object_: Version of the object in the form `{versionId:'my-uuid'}`. Default is `{}`. (optional) // * `callback(err, stream)` _function_: callback is called with `err` in case of error. `stream` is the object content stream - getObject(bucketName, objectName, getOpts={}, cb) { + getObject(bucketName: string, objectName: string, callback: (err: Error | null) => void): void + getObject(bucketName: string, objectName: string, getOpts: GetObjectOptions, callback: (err: Error | null) => void): void + getObject(bucketName: string, objectName: string, ...rest: [(err: Error | null) => void] | [GetObjectOptions, (err: Error | null) => void]): void { + const [callback, getOpts] = + rest.length === 1 ? [rest[0], {}] : + rest.length === 2 ? [rest[1], rest[0] ?? {}] : + [undefined, {}] + if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } if (!isValidObjectName(objectName)) { throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`) } - // Backward Compatibility - if (isFunction(getOpts)) { - cb = getOpts - getOpts = {} + + + if (!isFunction(callback as never)) { + throw new TypeError('callback should be of type "function"') } - if (!isFunction(cb)) { + if (callback == null) { throw new TypeError('callback should be of type "function"') } - this.getPartialObject(bucketName, objectName, 0, 0, getOpts, cb) + + + this.getPartialObject(bucketName, objectName, 0, 0, getOpts, callback) } // Callback is called with readable stream of the partial object content. @@ -924,34 +1015,36 @@ export class Client { // * `length` _number_: length of the object that will be read in the stream (optional, if not specified we read the rest of the file from the offset) // * `getOpts` _object_: Version of the object in the form `{versionId:'my-uuid'}`. Default is `{}`. (optional) // * `callback(err, stream)` _function_: callback is called with `err` in case of error. `stream` is the object content stream - getPartialObject(bucketName, objectName, offset, length, getOpts={}, cb) { - if (isFunction(length)) { - cb = length - length = 0 - } + getPartialObject(bucketName: string, objectName: string, offset: number, callback: (err: Error | null, response?: Http.IncomingMessage) => void): void + getPartialObject(bucketName: string, objectName: string, offset: number, length: number, callback: (err: Error | null, response?: Http.IncomingMessage) => void): void + getPartialObject(bucketName: string, objectName: string, offset: number, length: number, getOpts: GetObjectOptions, callback: (err: Error | null, response?: Http.IncomingMessage | undefined) => void): void + getPartialObject(bucketName: string, objectName: string, offset: number, ...rest: [(err: Error | null, response?: Http.IncomingMessage) => void] | [number, (err: Error | null, response?: Http.IncomingMessage) => void] | [number, GetObjectOptions, (err: Error | null, response?: Http.IncomingMessage) => void]): void { + const [callback, getOpts, length] = + rest.length === 1 ? [rest[0], {}, undefined] : + rest.length === 2 ? [rest[1], {}, rest[0]] : + [rest[2], rest[1], rest[0]] + if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } if (!isValidObjectName(objectName)) { throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`) } - if (!isNumber(offset)) { + if (!isNumber(offset as never)) { throw new TypeError('offset should be of type "number"') } - if (!isNumber(length)) { - throw new TypeError('length should be of type "number"') - } - // Backward Compatibility - if (isFunction(getOpts)) { - cb = getOpts - getOpts = {} + + if (length != null) { + if (!isNumber(length as never)) { + throw new TypeError('length should be of type "number"') + } } - if (!isFunction(cb)) { + if (!isFunction(callback as never)) { throw new TypeError('callback should be of type "function"') } - var range = '' + let range = '' if (offset || length) { if (offset) { range = `bytes=${+offset}-` @@ -964,19 +1057,19 @@ export class Client { } } - var headers = {} + const headers: Http.OutgoingHttpHeaders = {} if (range !== '') { headers.range = range } - var expectedStatusCodes = [200] + const expectedStatusCodes = [200] if (range) { expectedStatusCodes.push(206) } - var method = 'GET' + const method = 'GET' - var query = querystring.stringify(getOpts) - this.makeRequest({method, bucketName, objectName, headers, query}, '', expectedStatusCodes, '', true, cb) + const query = querystring.stringify(getOpts) + this.makeRequest({method, bucketName, objectName, headers, query}, '', expectedStatusCodes, '', true, callback) } // Uploads the object using contents from a file @@ -987,7 +1080,13 @@ export class Client { // * `filePath` _string_: file path of the file to be uploaded // * `metaData` _Javascript Object_: metaData assosciated with the object // * `callback(err, objInfo)` _function_: non null `err` indicates error, `objInfo` _object_ which contains versionId and etag. - fPutObject(bucketName, objectName, filePath, metaData, callback) { + fPutObject(bucketName: string, objectName: string, filePath: fs.PathLike, callback: (err: Error | null, response: any) => void): void + fPutObject(bucketName: string, objectName: string, filePath: fs.PathLike, metaData: Record, callback: (err: Error | null, response: any) => void): void + fPutObject(bucketName: string, objectName: string, filePath: fs.PathLike, ...rest: [callback: (err: Error | null, response: any) => void] | [metaData: Record, callback: (err: Error | null, response: any) => void]): void { + const [callback, metaData] = + rest.length === 1 ? [rest[0], {}] : + [rest[1], rest[0] ?? {}] + if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -995,14 +1094,11 @@ export class Client { throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`) } - if (!isString(filePath)) { + if (!isString(filePath.toString() as never)) { throw new TypeError('filePath should be of type "string"') } - if (isFunction(metaData)) { - callback = metaData - metaData = {} // Set metaData empty if no metaData provided. - } - if (!isObject(metaData)) { + + if (!isObject(metaData as never)) { throw new TypeError('metaData should be of type "object"') } @@ -1011,15 +1107,15 @@ export class Client { // Updates metaData to have the correct prefix if needed metaData = prependXAMZMeta(metaData) - var size - var partSize + let size: number + let partSize: number async.waterfall([ - cb => fs.stat(filePath, cb), - (stats, cb) => { + ( cb: (err: NodeJS.ErrnoException | null, stats: fs.Stats) => void) => fs.stat(filePath, cb), + (stats: { size: any }, cb: ((err: Error | null, uploadId?: string | undefined) => void) | ((arg0: boolean | Error) => void)) => { size = stats.size - var cbTriggered = false - var origCb = cb + let cbTriggered = false + const origCb = cb cb = function () { if (cbTriggered) { return @@ -1032,20 +1128,20 @@ export class Client { } if (size <= this.partSize) { // simple PUT request, no multipart - var multipart = false - var uploader = this.getUploader(bucketName, objectName, metaData, multipart) - var hash = transformers.getHashSummer(this.enableSHA256) - var start = 0 - var end = size - 1 - var autoClose = true + const multipart = false + const uploader = this.getUploader(bucketName, objectName, metaData, multipart) + const hash = transformers.getHashSummer(this.enableSHA256) + const start = 0 + let end = size - 1 + const autoClose = true if (size === 0) end = 0 - var options = {start, end, autoClose} + const options = {start, end, autoClose} pipesetup(fs.createReadStream(filePath, options), hash) .on('data', data => { - var md5sum = data.md5sum - var sha256sum = data.sha256sum - var stream = fs.createReadStream(filePath, options) - uploader(stream, size, sha256sum, md5sum, (err, objInfo) => { + const md5sum = data.md5sum + const sha256sum = data.sha256sum + const stream = fs.createReadStream(filePath, options) + uploader(stream, size, sha256sum, md5sum, (err: any, objInfo: any) => { callback(err, objInfo) cb(true) }) @@ -1055,32 +1151,32 @@ export class Client { } this.findUploadId(bucketName, objectName, cb) }, - (uploadId, cb) => { + (uploadId: any, cb: (arg0: any, arg1: any, arg2: never[]) => any) => { // if there was a previous incomplete upload, fetch all its uploaded parts info - if (uploadId) return this.listParts(bucketName, objectName, uploadId, (e, etags) => cb(e, uploadId, etags)) + if (uploadId) return this.listParts(bucketName, objectName, uploadId, (e: any, etags: any) => cb(e, uploadId, etags)) // there was no previous upload, initiate a new one - this.initiateNewMultipartUpload(bucketName, objectName, metaData, (e, uploadId) => cb(e, uploadId, [])) + this.initiateNewMultipartUpload(bucketName, objectName, metaData, (e: any, uploadId: any) => cb(e, uploadId, [])) }, - (uploadId, etags, cb) => { + (uploadId: any, etags: any[], cb: (arg0: null, arg1: any[] | undefined, arg2: undefined) => void) => { partSize = this.calculatePartSize(size) - var multipart = true - var uploader = this.getUploader(bucketName, objectName, metaData, multipart) + const multipart = true + const uploader = this.getUploader(bucketName, objectName, metaData, multipart) // convert array to object to make things easy - var parts = etags.reduce(function(acc, item) { + const parts = etags.reduce(function(acc: { [x: string]: any }, item: { part: string | number }) { if (!acc[item.part]) { acc[item.part] = item } return acc }, {}) - var partsDone = [] - var partNumber = 1 - var uploadedSize = 0 + const partsDone: { part: number; etag: any }[] = [] + let partNumber = 1 + let uploadedSize = 0 async.whilst( - cb => { cb(null, uploadedSize < size) }, - cb => { - var cbTriggered = false - var origCb = cb + ( cb: (arg0: null, arg1: boolean) => void) => { cb(null, uploadedSize < size) }, + ( cb: (arg0: undefined) => void) => { + let cbTriggered = false + const origCb = cb cb = function () { if (cbTriggered) { return @@ -1088,20 +1184,20 @@ export class Client { cbTriggered = true return origCb.apply(this, arguments) } - var part = parts[partNumber] - var hash = transformers.getHashSummer(this.enableSHA256) - var length = partSize + const part = parts[partNumber] + const hash = transformers.getHashSummer(this.enableSHA256) + let length = partSize if (length > (size - uploadedSize)) { length = size - uploadedSize } - var start = uploadedSize - var end = uploadedSize + length - 1 - var autoClose = true - var options = {autoClose, start, end} + const start = uploadedSize + const end = uploadedSize + length - 1 + const autoClose = true + const options = {autoClose, start, end} // verify md5sum of each part pipesetup(fs.createReadStream(filePath, options), hash) .on('data', data => { - var md5sumHex = (Buffer.from(data.md5sum, 'base64')).toString('hex') + const md5sumHex = Buffer.from(data.md5sum, 'base64').toString('hex') if (part && (md5sumHex === part.etag)) { // md5 matches, chunk already uploaded partsDone.push({part: partNumber, etag: part.etag}) @@ -1110,9 +1206,9 @@ export class Client { return cb() } // part is not uploaded yet, or md5 mismatch - var stream = fs.createReadStream(filePath, options) + const stream = fs.createReadStream(filePath, options) uploader(uploadId, partNumber, stream, length, - data.sha256sum, data.md5sum, (e, objInfo) => { + data.sha256sum, data.md5sum, (e: any, objInfo: { etag: any }) => { if (e) return cb(e) partsDone.push({part: partNumber, etag: objInfo.etag}) partNumber++ @@ -1122,15 +1218,15 @@ export class Client { }) .on('error', e => cb(e)) }, - e => { + ( e: any) => { if (e) return cb(e) cb(null, partsDone, uploadId) } ) }, // all parts uploaded, complete the multipart upload - (etags, uploadId, cb) => this.completeMultipartUpload(bucketName, objectName, uploadId, etags, cb) - ], (err, ...rest) => { + (etags: any, uploadId: any, cb: any) => this.completeMultipartUpload(bucketName, objectName, uploadId, etags, cb) + ], (err: boolean, ...rest: any) => { if (err === true) return callback(err, ...rest) }) @@ -1154,7 +1250,7 @@ export class Client { // * `callback(err, objInfo)` _function_: `err` is `null` in case of success and `info` will have the following object details: // * `etag` _string_: etag of the object // * `versionId` _string_: versionId of the object - putObject(bucketName, objectName, stream, size, metaData, callback) { + putObject(bucketName: string, objectName: string, stream: Stream.Readable, size: number, metaData: {}, callback: any) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -1205,11 +1301,11 @@ export class Client { // s3 requires that all non-end chunks be at least `this.partSize`, // so we chunk the stream until we hit either that size or the end before // we flush it to s3. - let chunker = new BlockStream2({size, zeroPadding: false}) + const chunker = new BlockStream2({size, zeroPadding: false}) // This is a Writable stream that can be written to in order to upload // to the specified bucket and object automatically. - let uploader = new ObjectUploader(this, bucketName, objectName, size, metaData, callback) + const uploader = new ObjectUploader(this, bucketName, objectName, size, metaData, callback) // stream => chunker => uploader stream.pipe(chunker).pipe(uploader) } @@ -1222,60 +1318,56 @@ export class Client { // * `srcObject` _string_: path of the source object to be copied // * `conditions` _CopyConditions_: copy conditions that needs to be satisfied (optional, default `null`) // * `callback(err, {etag, lastModified})` _function_: non null `err` indicates error, `etag` _string_ and `listModifed` _Date_ are respectively the etag and the last modified date of the newly copied object - copyObjectV1(arg1, arg2, arg3, arg4, arg5) { - var bucketName = arg1 - var objectName = arg2 - var srcObject = arg3 - var conditions, cb - if (typeof arg4 == 'function' && arg5 === undefined) { - conditions = null - cb = arg4 - } else { - conditions = arg4 - cb = arg5 - } + copyObjectV1(bucketName: string, objectName: string, sourceObject: string, callback: (err: Error | null, response?: CopyObjectV1Response) => void): void + copyObjectV1(bucketName: string, objectName: string, sourceObject: string, conditions: CopyConditions, callback: (err: Error | null, response?: CopyObjectV1Response) => void): void + copyObjectV1(bucketName: string, objectName: string, sourceObject: string, ...rest: [callback: (err: Error | null, response?: CopyObjectV1Response) => void] | [conditions: CopyConditions, callback: (err: Error | null, response?: CopyObjectV1Response) => void]): void { + const [callback, conditions] = + rest.length === 1 ? [rest[0], null] : + [rest[1], rest[1] ?? null] + if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } if (!isValidObjectName(objectName)) { throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`) } - if (!isString(srcObject)) { + if (!isString(sourceObject as never)) { throw new TypeError('srcObject should be of type "string"') } - if (srcObject === "") { - throw new errors.InvalidPrefixError(`Empty source prefix`) + if (sourceObject === '') { + throw new errors.InvalidPrefixError('Empty source prefix') } if (conditions !== null && !(conditions instanceof CopyConditions)) { throw new TypeError('conditions should be of type "CopyConditions"') } - var headers = {} - headers['x-amz-copy-source'] = uriResourceEscape(srcObject) + const headers: Http.OutgoingHttpHeaders = {} + headers['x-amz-copy-source'] = uriResourceEscape(sourceObject) if (conditions !== null) { - if (conditions.modified !== "") { + if (conditions.modified !== '') { headers['x-amz-copy-source-if-modified-since'] = conditions.modified } - if (conditions.unmodified !== "") { + if (conditions.unmodified !== '') { headers['x-amz-copy-source-if-unmodified-since'] = conditions.unmodified } - if (conditions.matchETag !== "") { + if (conditions.matchETag !== '') { headers['x-amz-copy-source-if-match'] = conditions.matchETag } - if (conditions.matchEtagExcept !== "") { + if (conditions.matchETagExcept !== '') { headers['x-amz-copy-source-if-none-match'] = conditions.matchETagExcept } } - var method = 'PUT' + const method = 'PUT' this.makeRequest({method, bucketName, objectName, headers}, '', [200], '', true, (e, response) => { - if (e) return cb(e) - var transformer = transformers.getCopyObjectTransformer() + if (e) return callback(e) + if (response == null) return callback(new errors.MisbehavingServerError('Expecting a Http.IncomingMessage response stream, got undefined')) + const transformer = transformers.getCopyObjectTransformer() pipesetup(response, transformer) - .on('error', e => cb(e)) - .on('data', data => cb(null, data)) + .on('error', e => callback(e)) + .on('data', data => callback(null, data)) }) } @@ -1286,18 +1378,18 @@ export class Client { * @param cb __function__ called with null if there is an error * @returns Promise if no callack is passed. */ - copyObjectV2(sourceConfig, destConfig, cb){ + copyObjectV2(sourceConfig: { getHeaders: () => {} }, destConfig: { validate: () => any; getHeaders: () => {}; Bucket: any; Object: any } | undefined, cb: ((arg0: Error | null, arg1: { Bucket: any; Key: any; LastModified: any; MetaData: {}; VersionId: any; SourceVersionId: any; Etag: string; Size: number } | undefined) => void) | undefined) { - if(!(sourceConfig instanceof CopySourceOptions )){ + if (!(sourceConfig instanceof CopySourceOptions )) { throw new errors.InvalidArgumentError('sourceConfig should of type CopySourceOptions ') } - if(!(destConfig instanceof CopyDestinationOptions )){ + if (!(destConfig instanceof CopyDestinationOptions )) { throw new errors.InvalidArgumentError('destConfig should of type CopyDestinationOptions ') } - if(!destConfig.validate()){ + if (!destConfig.validate()) { return false } - if(!destConfig.validate()){ + if (!destConfig.validate()) { return false } if (!isFunction(cb)) { @@ -1306,7 +1398,7 @@ export class Client { const headers = Object.assign({}, sourceConfig.getHeaders(), destConfig.getHeaders()) - const bucketName = destConfig.Bucket + const bucketName = destConfig.Bucket const objectName= destConfig.Object const method = 'PUT' @@ -1329,13 +1421,13 @@ export class Client { Size: +resHeaders['content-length'] } - return cb(null, copyObjResponse) + return cb(null, copyObjResponse) }) }) } // Backward compatibility for Copy Object API. - copyObject(...allArgs) { + copyObject(...allArgs: CopyDestinationOptions[]) { if (allArgs[0] instanceof CopySourceOptions && allArgs[1] instanceof CopyDestinationOptions) { return this.copyObjectV2(...arguments) } @@ -1343,41 +1435,41 @@ export class Client { } // list a batch of objects - listObjectsQuery(bucketName, prefix, marker, listQueryOpts={}) { + listObjectsQuery(bucketName: string, prefix: string, marker: string, listQueryOpts: ListQueryOptions) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } - if (!isString(prefix)) { + if (!isString(prefix as never)) { throw new TypeError('prefix should be of type "string"') } - if (!isString(marker)) { + if (!isString(marker as never)) { throw new TypeError('marker should be of type "string"') } - let{ + let { Delimiter, MaxKeys, - IncludeVersion, + IncludeVersion } = listQueryOpts - if (!isObject(listQueryOpts)) { + if (!isObject(listQueryOpts as never)) { throw new TypeError('listQueryOpts should be of type "object"') } - if (!isString(Delimiter)) { + if (!isString(Delimiter as never)) { throw new TypeError('Delimiter should be of type "string"') } - if (!isNumber(MaxKeys)) { + if (!isNumber(MaxKeys as never)) { throw new TypeError('MaxKeys should be of type "number"') } - const queries = [] + const queries: string[] = [] // escape every value in query string, except maxKeys queries.push(`prefix=${uriEscape(prefix)}`) queries.push(`delimiter=${uriEscape(Delimiter)}`) - queries.push(`encoding-type=url`) + queries.push('encoding-type=url') if (IncludeVersion) { - queries.push(`versions`) + queries.push('versions') } if (marker) { @@ -1397,15 +1489,16 @@ export class Client { queries.push(`max-keys=${MaxKeys}`) } queries.sort() - var query = '' + let query = '' if (queries.length > 0) { query = `${queries.join('&')}` } - var method = 'GET' - var transformer = transformers.getListObjectsTransformer() + const method = 'GET' + const transformer = transformers.getListObjectsTransformer() this.makeRequest({method, bucketName, query}, '', [200], '', true, (e, response) => { if (e) return transformer.emit('error', e) + if (response == null) return transformer.emit('error', new errors.MisbehavingServerError('Expecting a Http.IncomingMessage response stream, got undefined')) pipesetup(response, transformer) }) return transformer @@ -1429,7 +1522,7 @@ export class Client { // * `obj.lastModified` _Date_: modified time stamp // * `obj.isDeleteMarker` _boolean_: true if it is a delete marker // * `obj.versionId` _string_: versionId of the object - listObjects(bucketName, prefix, recursive, listOpts={}) { + listObjects(bucketName: string, prefix: string | undefined, recursive: boolean | undefined, listOpts={}) { if (prefix === undefined) prefix = '' if (recursive === undefined) recursive = false if (!isValidBucketName(bucketName)) { @@ -1447,15 +1540,15 @@ export class Client { if (!isObject(listOpts)) { throw new TypeError('listOpts should be of type "object"') } - var marker = '' + let marker = '' const listQueryOpts={ Delimiter:recursive ? '' : '/', // if recursive is false set delimiter to '/' MaxKeys: 1000, - IncludeVersion:listOpts.IncludeVersion, + IncludeVersion:listOpts.IncludeVersion } - var objects = [] - var ended = false - var readStream = Stream.Readable({objectMode: true}) + let objects: any[] = [] + let ended = false + const readStream = Stream.Readable({objectMode: true}) readStream._read = () => { // push one object per _read() if (objects.length) { @@ -1465,8 +1558,8 @@ export class Client { if (ended) return readStream.push(null) // if there are no objects to push do query for the next batch of objects this.listObjectsQuery(bucketName, prefix, marker, listQueryOpts) - .on('error', e => readStream.emit('error', e)) - .on('data', result => { + .on('error', (e: any) => readStream.emit('error', e)) + .on('data', (result: { isTruncated: any; nextMarker: any; versionIdMarker: any; objects: any[] }) => { if (result.isTruncated) { marker = result.nextMarker || result.versionIdMarker } else { @@ -1489,7 +1582,7 @@ export class Client { // * `delimiter` _string_: A delimiter is a character you use to group keys. // * `max-keys` _number_: Sets the maximum number of keys returned in the response body. // * `start-after` _string_: Specifies the key to start after when listing objects in a bucket. - listObjectsV2Query(bucketName, prefix, continuationToken, delimiter, maxKeys, startAfter) { + listObjectsV2Query(bucketName: string, prefix: string, continuationToken: string, delimiter: string, maxKeys: number, startAfter: string) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -1508,11 +1601,11 @@ export class Client { if (!isString(startAfter)) { throw new TypeError('startAfter should be of type "string"') } - var queries = [] + const queries = [] // Call for listing objects v2 API - queries.push(`list-type=2`) - queries.push(`encoding-type=url`) + queries.push('list-type=2') + queries.push('encoding-type=url') // escape every value in query string, except maxKeys queries.push(`prefix=${uriEscape(prefix)}`) @@ -1535,12 +1628,12 @@ export class Client { queries.push(`max-keys=${maxKeys}`) } queries.sort() - var query = '' + let query = '' if (queries.length > 0) { query = `${queries.join('&')}` } - var method = 'GET' - var transformer = transformers.getListObjectsV2Transformer() + const method = 'GET' + const transformer = transformers.getListObjectsV2Transformer() this.makeRequest({method, bucketName, query}, '', [200], '', true, (e, response) => { if (e) return transformer.emit('error', e) pipesetup(response, transformer) @@ -1563,7 +1656,7 @@ export class Client { // * `obj.size` _number_: size of the object // * `obj.etag` _string_: etag of the object // * `obj.lastModified` _Date_: modified time stamp - listObjectsV2(bucketName, prefix, recursive, startAfter) { + listObjectsV2(bucketName: string, prefix: string | undefined, recursive: boolean | undefined, startAfter: string | undefined) { if (prefix === undefined) prefix = '' if (recursive === undefined) recursive = false if (startAfter === undefined) startAfter = '' @@ -1583,11 +1676,11 @@ export class Client { throw new TypeError('startAfter should be of type "string"') } // if recursive is false set delimiter to '/' - var delimiter = recursive ? '' : '/' - var continuationToken = '' - var objects = [] - var ended = false - var readStream = Stream.Readable({objectMode: true}) + const delimiter = recursive ? '' : '/' + let continuationToken = '' + let objects: any[] = [] + let ended = false + const readStream = Stream.Readable({objectMode: true}) readStream._read = () => { // push one object per _read() if (objects.length) { @@ -1597,8 +1690,8 @@ export class Client { if (ended) return readStream.push(null) // if there are no objects to push do query for the next batch of objects this.listObjectsV2Query(bucketName, prefix, continuationToken, delimiter, 1000, startAfter) - .on('error', e => readStream.emit('error', e)) - .on('data', result => { + .on('error', (e: any) => readStream.emit('error', e)) + .on('data', (result: { isTruncated: any; nextContinuationToken: string; objects: any[] }) => { if (result.isTruncated) { continuationToken = result.nextContinuationToken } else { @@ -1623,7 +1716,7 @@ export class Client { // * `stat.metaData` _string_: MetaData of the object // * `stat.lastModified` _Date_: modified time stamp // * `stat.versionId` _string_: version id of the object if available - statObject(bucketName, objectName, statOpts={}, cb) { + statObject(bucketName: string, objectName: string, statOpts={}, cb: {} | undefined) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -1636,16 +1729,16 @@ export class Client { statOpts={} } - if(!isObject(statOpts)){ + if (!isObject(statOpts)) { throw new errors.InvalidArgumentError('statOpts should be of type "object"') } if (!isFunction(cb)) { throw new TypeError('callback should be of type "function"') } - var query = querystring.stringify(statOpts) - var method = 'HEAD' - this.makeRequest({method, bucketName, objectName, query},'' , [200], '', true, (e, response) => { + const query = querystring.stringify(statOpts) + const method = 'HEAD' + this.makeRequest({method, bucketName, objectName, query}, '', [200], '', true, (e, response) => { if (e) return cb(e) // We drain the socket so that the connection gets closed. Note that this @@ -1671,7 +1764,7 @@ export class Client { // * `objectName` _string_: name of the object // * `removeOpts` _object_: Version of the object in the form `{versionId:'my-uuid', governanceBypass:true|false, forceDelete:true|false}`. Default is `{}`. (optional) // * `callback(err)` _function_: callback function is called with non `null` value in case of error - removeObject(bucketName, objectName, removeOpts={} , cb) { + removeObject(bucketName: string, objectName: string, removeOpts={}, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -1684,7 +1777,7 @@ export class Client { removeOpts={} } - if(!isObject(removeOpts)){ + if (!isObject(removeOpts)) { throw new errors.InvalidArgumentError('removeOpts should be of type "object"') } if (!isFunction(cb)) { @@ -1693,21 +1786,21 @@ export class Client { const method = 'DELETE' const queryParams = {} - if(removeOpts.versionId){ + if (removeOpts.versionId) { queryParams.versionId=`${removeOpts.versionId}` } const headers = {} - if(removeOpts.governanceBypass){ - headers["X-Amz-Bypass-Governance-Retention"]=true + if (removeOpts.governanceBypass) { + headers['X-Amz-Bypass-Governance-Retention']=true } - if(removeOpts.forceDelete){ - headers["x-minio-force-delete"]=true + if (removeOpts.forceDelete) { + headers['x-minio-force-delete']=true } const query = querystring.stringify( queryParams ) - let requestOptions = {method, bucketName, objectName, headers} - if(query){ + const requestOptions = {method, bucketName, objectName, headers} + if (query) { requestOptions['query']=query } @@ -1722,7 +1815,7 @@ export class Client { // * List of Object names as array of strings which are object keys: ['objectname1','objectname2'] // * List of Object name and versionId as an object: [{name:"objectname",versionId:"my-version-id"}] - removeObjects(bucketName, objectsList, cb) { + removeObjects(bucketName: string, objectsList: any[], cb: any) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -1737,7 +1830,7 @@ export class Client { const query = 'delete' const method = 'POST' - let result = objectsList.reduce((result, entry) => { + const result = objectsList.reduce((result: { list: any[]; listOfList: any[] }, entry: any) => { result.list.push(entry) if (result.list.length === maxEntries) { result.listOfList.push(result.list) @@ -1752,16 +1845,16 @@ export class Client { const encoder = new TextEncoder() - async.eachSeries(result.listOfList, (list, callback) => { - var objects=[] - list.forEach(function(value){ + async.eachSeries(result.listOfList, (list: any[], callback: (arg0: Error | null) => void) => { + const objects: { Key: any; VersionId?: any }[]=[] + list.forEach(function(value: { name: any; versionId: any }) { if (isObject(value)) { - objects.push({"Key": value.name, "VersionId": value.versionId}) + objects.push({'Key': value.name, 'VersionId': value.versionId}) } else { - objects.push({"Key": value}) + objects.push({'Key': value}) } }) - let deleteObjects = {"Delete": {"Quiet": true, "Object": objects}} + const deleteObjects = {'Delete': {'Quiet': true, 'Object': objects}} const builder = new xml2js.Builder({ headless: true }) let payload = builder.buildObject(deleteObjects) payload = encoder.encode(payload) @@ -1782,7 +1875,7 @@ export class Client { // __Arguments__ // * `bucketName` _string_: name of the bucket // * `callback(err, policy)` _function_: callback function - getBucketPolicy(bucketName, cb) { + getBucketPolicy(bucketName: string, cb: ((...args: any[]) => void) | ((arg0: Error | null, arg1: string | undefined) => void)) { // Validate arguments. if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError(`Invalid bucket name: ${bucketName}`) @@ -1791,8 +1884,8 @@ export class Client { throw new TypeError('callback should be of type "function"') } - let method = 'GET' - let query = 'policy' + const method = 'GET' + const query = 'policy' this.makeRequest({method, bucketName, query}, '', [200], '', true, (e, response) => { if (e) return cb(e) @@ -1812,7 +1905,7 @@ export class Client { // * `bucketName` _string_: name of the bucket // * `bucketPolicy` _string_: bucket policy (JSON stringify'ed) // * `callback(err)` _function_: callback function - setBucketPolicy(bucketName, policy, cb) { + setBucketPolicy(bucketName: string, policy: string | Buffer, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { // Validate arguments. if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError(`Invalid bucket name: ${bucketName}`) @@ -1825,7 +1918,7 @@ export class Client { } let method = 'DELETE' - let query = 'policy' + const query = 'policy' if (policy) { method = 'PUT' @@ -1844,7 +1937,7 @@ export class Client { // * `expiry` _number_: expiry in seconds (optional, default 7 days) // * `reqParams` _object_: request parameters (optional) e.g {versionId:"10fa9946-3f64-4137-a58f-888065c0732e"} // * `requestDate` _Date_: A date object, the url will be issued at (optional) - presignedUrl(method, bucketName, objectName, expires, reqParams, requestDate, cb) { + presignedUrl(method: string, bucketName: string, objectName: any, expires: number, reqParams: Record, requestDate: unknown, cb: ((arg0: unknown, arg1: string | undefined) => void) | undefined) { if (this.anonymous) { throw new errors.AnonymousRequestError('Presigned ' + method + ' url cannot be generated for anonymous requests') } @@ -1875,17 +1968,17 @@ export class Client { if (!isFunction(cb)) { throw new TypeError('callback should be of type "function"') } - var query = querystring.stringify(reqParams) + const query = querystring.stringify(reqParams) this.getBucketRegion(bucketName, (e, region) => { if (e) return cb(e) // This statement is added to ensure that we send error through // callback on presign failure. - var url - var reqOptions = this.getRequestOptions({method, - region, - bucketName, - objectName, - query}) + let url + const reqOptions = this.getRequestOptions({method, + region, + bucketName, + objectName, + query}) this.checkAndRefreshCreds() try { @@ -1906,7 +1999,7 @@ export class Client { // * `expiry` _number_: expiry in seconds (optional, default 7 days) // * `respHeaders` _object_: response headers to override or request params for query (optional) e.g {versionId:"10fa9946-3f64-4137-a58f-888065c0732e"} // * `requestDate` _Date_: A date object, the url will be issued at (optional) - presignedGetObject(bucketName, objectName, expires, respHeaders, requestDate, cb) { + presignedGetObject(bucketName: string, objectName: string, expires: any, respHeaders: { [x: string]: any } | undefined, requestDate: Date, cb: any) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -1920,10 +2013,10 @@ export class Client { requestDate = new Date() } - var validRespHeaders = ['response-content-type', 'response-content-language', 'response-expires', 'response-cache-control', - 'response-content-disposition', 'response-content-encoding'] + const validRespHeaders = ['response-content-type', 'response-content-language', 'response-expires', 'response-cache-control', + 'response-content-disposition', 'response-content-encoding'] validRespHeaders.forEach(header => { - if (respHeaders !== undefined && respHeaders[header] !== undefined && !isString(respHeaders[header])) { + if (respHeaders !== undefined && respHeaders[header] !== undefined && !isString(respHeaders[header])) { throw new TypeError(`response header ${header} should be of type "string"`) } }) @@ -1936,7 +2029,7 @@ export class Client { // * `bucketName` _string_: name of the bucket // * `objectName` _string_: name of the object // * `expiry` _number_: expiry in seconds (optional, default 7 days) - presignedPutObject(bucketName, objectName, expires, cb) { + presignedPutObject(bucketName: string, objectName: string, expires: any, cb: any) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ${bucketName}') } @@ -1954,7 +2047,7 @@ export class Client { // presignedPostPolicy can be used in situations where we want more control on the upload than what // presignedPutObject() provides. i.e Using presignedPostPolicy we will be able to put policy restrictions // on the object's `name` `bucket` `expiry` `Content-Type` `Content-Disposition` `metaData` - presignedPostPolicy(postPolicy, cb) { + presignedPostPolicy(postPolicy: { formData: { [x: string]: string; bucket: string; policy: string }; policy: { expiration: any; conditions: string[][] }; setExpires: (arg0: Date) => void }, cb: (arg0: Error | null, arg1: { postURL: string; formData: any } | undefined) => void) { if (this.anonymous) { throw new errors.AnonymousRequestError('Presigned POST policy cannot be generated for anonymous requests') } @@ -1966,15 +2059,15 @@ export class Client { } this.getBucketRegion(postPolicy.formData.bucket, (e, region) => { if (e) return cb(e) - var date = new Date() - var dateStr = makeDateLong(date) + const date = new Date() + const dateStr = makeDateLong(date) this.checkAndRefreshCreds() if (!postPolicy.policy.expiration) { // 'expiration' is mandatory field for S3. // Set default expiration date of 7 days. - var expires = new Date() + const expires = new Date() expires.setSeconds(24 * 60 * 60 * 7) postPolicy.setExpires(expires) } @@ -1985,35 +2078,35 @@ export class Client { postPolicy.policy.conditions.push(['eq', '$x-amz-algorithm', 'AWS4-HMAC-SHA256']) postPolicy.formData['x-amz-algorithm'] = 'AWS4-HMAC-SHA256' - postPolicy.policy.conditions.push(["eq", "$x-amz-credential", this.accessKey + "/" + getScope(region, date)]) - postPolicy.formData['x-amz-credential'] = this.accessKey + "/" + getScope(region, date) + postPolicy.policy.conditions.push(['eq', '$x-amz-credential', this.accessKey + '/' + getScope(region, date)]) + postPolicy.formData['x-amz-credential'] = this.accessKey + '/' + getScope(region, date) if (this.sessionToken) { postPolicy.policy.conditions.push(['eq', '$x-amz-security-token', this.sessionToken]) postPolicy.formData['x-amz-security-token'] = this.sessionToken } - var policyBase64 = Buffer.from(JSON.stringify(postPolicy.policy)).toString('base64') + const policyBase64 = Buffer.from(JSON.stringify(postPolicy.policy)).toString('base64') postPolicy.formData.policy = policyBase64 - var signature = postPresignSignatureV4(region, date, this.secretKey, policyBase64) + const signature = postPresignSignatureV4(region, date, this.secretKey, policyBase64) postPolicy.formData['x-amz-signature'] = signature - var opts = {} + const opts = {} opts.region = region opts.bucketName = postPolicy.formData.bucket - var reqOptions = this.getRequestOptions(opts) - var portStr = (this.port == 80 || this.port === 443) ? '' : `:${this.port.toString()}` - var urlStr = `${reqOptions.protocol}//${reqOptions.host}${portStr}${reqOptions.path}` - cb(null, {postURL: urlStr,formData: postPolicy.formData}) + const reqOptions = this.getRequestOptions(opts) + const portStr = this.port == 80 || this.port === 443 ? '' : `:${this.port.toString()}` + const urlStr = `${reqOptions.protocol}//${reqOptions.host}${portStr}${reqOptions.path}` + cb(null, {postURL: urlStr, formData: postPolicy.formData}) }) } // Calls implemented below are related to multipart. // Initiate a new multipart upload. - initiateNewMultipartUpload(bucketName, objectName, metaData, cb) { + initiateNewMultipartUpload(bucketName: string, objectName: string, metaData: {}, cb: { (e: any, uploadId: any): any; (err: any, uploadId: any): any; (arg0: Error | null, arg1: undefined): void }) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2023,12 +2116,12 @@ export class Client { if (!isObject(metaData)) { throw new errors.InvalidObjectNameError('contentType should be of type "object"') } - var method = 'POST' - let headers = Object.assign({}, metaData) - var query = 'uploads' + const method = 'POST' + const headers = Object.assign({}, metaData) + const query = 'uploads' this.makeRequest({method, bucketName, objectName, query, headers}, '', [200], '', true, (e, response) => { if (e) return cb(e) - var transformer = transformers.getInitiateMultipartTransformer() + const transformer = transformers.getInitiateMultipartTransformer() pipesetup(response, transformer) .on('error', e => cb(e)) .on('data', uploadId => cb(null, uploadId)) @@ -2037,7 +2130,7 @@ export class Client { // Complete the multipart upload. After all the parts are uploaded issuing // this call will aggregate the parts on the server into a single object. - completeMultipartUpload(bucketName, objectName, uploadId, etags, cb) { + completeMultipartUpload(bucketName: string, objectName: string, uploadId: string, etags: any[], cb: (arg0: Error | null, arg1: { etag: any; versionId: any } | undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2058,12 +2151,12 @@ export class Client { throw new errors.InvalidArgumentError('uploadId cannot be empty') } - var method = 'POST' - var query = `uploadId=${uriEscape(uploadId)}` + const method = 'POST' + const query = `uploadId=${uriEscape(uploadId)}` - var parts = [] + const parts: { Part: ({ PartNumber: any; ETag?: undefined } | { ETag: any; PartNumber?: undefined })[] }[] = [] - etags.forEach(element => { + etags.forEach((element: { part: any; etag: any }) => { parts.push({ Part: [{ PartNumber: element.part @@ -2073,12 +2166,12 @@ export class Client { }) }) - var payloadObject = {CompleteMultipartUpload: parts} - var payload = Xml(payloadObject) + const payloadObject = {CompleteMultipartUpload: parts} + const payload = Xml(payloadObject) this.makeRequest({method, bucketName, objectName, query}, payload, [200], '', true, (e, response) => { if (e) return cb(e) - var transformer = transformers.getCompleteMultipartTransformer() + const transformer = transformers.getCompleteMultipartTransformer() pipesetup(response, transformer) .on('error', e => cb(e)) .on('data', result => { @@ -2097,7 +2190,7 @@ export class Client { } // Get part-info of all parts of an incomplete upload specified by uploadId. - listParts(bucketName, objectName, uploadId, cb) { + listParts(bucketName: string, objectName: string, uploadId: any, cb: { (err: any, parts: any): any; (e: any, etags: any): any; (arg0: null, arg1: any[] | undefined): void }) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2110,9 +2203,9 @@ export class Client { if (!uploadId) { throw new errors.InvalidArgumentError('uploadId cannot be empty') } - var parts = [] - var listNext = (marker) => { - this.listPartsQuery(bucketName, objectName, uploadId, marker, (e, result) => { + let parts: any[] = [] + var listNext = (marker: number) => { + this.listPartsQuery(bucketName, objectName, uploadId, marker, (e: any, result: { parts: any; isTruncated: any; marker: any }) => { if (e) { cb(e) return @@ -2129,7 +2222,7 @@ export class Client { } // Called by listParts to fetch a batch of part-info - listPartsQuery(bucketName, objectName, uploadId, marker, cb) { + listPartsQuery(bucketName: string, objectName: string, uploadId: string, marker: number, cb: { (e: any, result: any): void; (arg0: Error | null, arg1: undefined): void }) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2148,16 +2241,16 @@ export class Client { if (!uploadId) { throw new errors.InvalidArgumentError('uploadId cannot be empty') } - var query = '' + let query = '' if (marker && marker !== 0) { query += `part-number-marker=${marker}&` } query += `uploadId=${uriEscape(uploadId)}` - var method = 'GET' + const method = 'GET' this.makeRequest({method, bucketName, objectName, query}, '', [200], '', true, (e, response) => { if (e) return cb(e) - var transformer = transformers.getListPartsTransformer() + const transformer = transformers.getListPartsTransformer() pipesetup(response, transformer) .on('error', e => cb(e)) .on('data', data => cb(null, data)) @@ -2165,7 +2258,7 @@ export class Client { } // Called by listIncompleteUploads to fetch a batch of incomplete uploads. - listIncompleteUploadsQuery(bucketName, prefix, keyMarker, uploadIdMarker, delimiter) { + listIncompleteUploadsQuery(bucketName: string, prefix: string, keyMarker: string, uploadIdMarker: string, delimiter: string) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2181,7 +2274,7 @@ export class Client { if (!isString(delimiter)) { throw new TypeError('delimiter should be of type "string"') } - var queries = [] + const queries = [] queries.push(`prefix=${uriEscape(prefix)}`) queries.push(`delimiter=${uriEscape(delimiter)}`) @@ -2193,16 +2286,16 @@ export class Client { queries.push(`upload-id-marker=${uploadIdMarker}`) } - var maxUploads = 1000 + const maxUploads = 1000 queries.push(`max-uploads=${maxUploads}`) queries.sort() queries.unshift('uploads') - var query = '' + let query = '' if (queries.length > 0) { query = `${queries.join('&')}` } - var method = 'GET' - var transformer = transformers.getListMultipartTransformer() + const method = 'GET' + const transformer = transformers.getListMultipartTransformer() this.makeRequest({method, bucketName, query}, '', [200], '', true, (e, response) => { if (e) return transformer.emit('error', e) pipesetup(response, transformer) @@ -2211,7 +2304,7 @@ export class Client { } // Find uploadId of an incomplete upload. - findUploadId(bucketName, objectName, cb) { + findUploadId(bucketName: string, objectName: string, cb: (err: Error | null, uploadId?: string) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2221,12 +2314,12 @@ export class Client { if (!isFunction(cb)) { throw new TypeError('cb should be of type "function"') } - var latestUpload - var listNext = (keyMarker, uploadIdMarker) => { + let latestUpload: string + var listNext = (keyMarker: string, uploadIdMarker: string) => { this.listIncompleteUploadsQuery(bucketName, objectName, keyMarker, uploadIdMarker, '') - .on('error', e => cb(e)) - .on('data', result => { - result.uploads.forEach(upload => { + .on('error', (e: Error | null) => cb(e)) + .on('data', (result: { uploads: any[]; isTruncated: any; nextKeyMarker: any; nextUploadIdMarker: any }) => { + result.uploads.forEach((upload: string) => { if (upload.key === objectName) { if (!latestUpload || (upload.initiated.getTime() > latestUpload.initiated.getTime())) { @@ -2249,7 +2342,7 @@ export class Client { // Returns a function that can be used for uploading objects. // If multipart === true, it returns function that is used to upload // a part of the multipart. - getUploader(bucketName, objectName, metaData, multipart) { + getUploader(bucketName: string, objectName: string, metaData: any, multipart: boolean) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2263,7 +2356,7 @@ export class Client { throw new TypeError('metadata should be of type "object"') } - var validate = (stream, length, sha256sum, md5sum, cb) => { + const validate = (stream: any, length: undefined, sha256sum: undefined, md5sum: undefined, cb: undefined) => { if (!isReadableStream(stream)) { throw new TypeError('stream should be of type "Stream"') } @@ -2280,12 +2373,12 @@ export class Client { throw new TypeError('callback should be of type "function"') } } - var simpleUploader = (...args) => { + const simpleUploader = (...args: any[]) => { validate(...args) - var query = '' + const query = '' upload(query, ...args) } - var multipartUploader = (uploadId, partNumber, ...rest) => { + const multipartUploader = (uploadId: string, partNumber: any, ...rest: any[]) => { if (!isString(uploadId)) { throw new TypeError('uploadId should be of type "string"') } @@ -2299,11 +2392,11 @@ export class Client { throw new errors.InvalidArgumentError('partNumber cannot be 0') } validate(...rest) - var query = `partNumber=${partNumber}&uploadId=${uriEscape(uploadId)}` + const query = `partNumber=${partNumber}&uploadId=${uriEscape(uploadId)}` upload(query, ...rest) } - var upload = (query, stream, length, sha256sum, md5sum, cb) => { - var method = 'PUT' + var upload = (query: string, stream: Stream.Readable, length: undefined, sha256sum: string | undefined, md5sum: undefined, cb: ((arg0: Error | null, arg1: { etag: string; versionId: any } | undefined) => void) | undefined) => { + const method = 'PUT' let headers = {'Content-Length': length} if (!multipart) { @@ -2330,7 +2423,7 @@ export class Client { } // Remove all the notification configurations in the S3 provider - setBucketNotification(bucketName, config, cb) { + setBucketNotification(bucketName: string, config: NotificationConfig, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2340,32 +2433,32 @@ export class Client { if (!isFunction(cb)) { throw new TypeError('callback should be of type "function"') } - var method = 'PUT' - var query = 'notification' - var builder = new xml2js.Builder({rootName:'NotificationConfiguration', renderOpts:{'pretty':false}, headless:true}) - var payload = builder.buildObject(config) + const method = 'PUT' + const query = 'notification' + const builder = new xml2js.Builder({rootName:'NotificationConfiguration', renderOpts:{'pretty':false}, headless:true}) + const payload = builder.buildObject(config) this.makeRequest({method, bucketName, query}, payload, [200], '', false, cb) } - removeAllBucketNotification(bucketName, cb) { + removeAllBucketNotification(bucketName: any, cb: any) { this.setBucketNotification(bucketName, new NotificationConfig(), cb) } // Return the list of notification configurations stored // in the S3 provider - getBucketNotification(bucketName, cb) { + getBucketNotification(bucketName: string, cb: (arg0: Error | null, arg1: undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } if (!isFunction(cb)) { throw new TypeError('callback should be of type "function"') } - var method = 'GET' - var query = 'notification' + const method = 'GET' + const query = 'notification' this.makeRequest({method, bucketName, query}, '', [200], '', true, (e, response) => { if (e) return cb(e) - var transformer = transformers.getBucketNotificationTransformer() - var bucketNotification + const transformer = transformers.getBucketNotificationTransformer() + let bucketNotification: any pipesetup(response, transformer) .on('data', result => bucketNotification = result) .on('error', e => cb(e)) @@ -2374,7 +2467,7 @@ export class Client { } // Listens for bucket notifications. Returns an EventEmitter. - listenBucketNotification(bucketName, prefix, suffix, events) { + listenBucketNotification(bucketName: string, prefix: any, suffix: any, events: any) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError(`Invalid bucket name: ${bucketName}`) } @@ -2387,21 +2480,21 @@ export class Client { if (!isArray(events)) { throw new TypeError('events must be of type Array') } - let listener = new NotificationPoller(this, bucketName, prefix, suffix, events) + const listener = new NotificationPoller(this, bucketName, prefix, suffix, events) listener.start() return listener } - getBucketVersioning(bucketName,cb) { + getBucketVersioning(bucketName: string, cb: ((...args: any[]) => void) | ((arg0: Error | null, arg1: Buffer | undefined) => void)) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } if (!isFunction(cb)) { throw new errors.InvalidArgumentError('callback should be of type "function"') } - var method = 'GET' - var query = "versioning" + const method = 'GET' + const query = 'versioning' this.makeRequest({method, bucketName, query}, '', [200], '', true, (e, response) => { if (e) return cb(e) @@ -2418,21 +2511,21 @@ export class Client { }) } - setBucketVersioning(bucketName,versionConfig, cb) { + setBucketVersioning(bucketName: string, versionConfig: {}, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } - if(!Object.keys(versionConfig).length){ + if (!Object.keys(versionConfig).length) { throw new errors.InvalidArgumentError('versionConfig should be of type "object"') } if (!isFunction(cb)) { throw new TypeError('callback should be of type "function"') } - var method = 'PUT' - var query = "versioning" - var builder = new xml2js.Builder({rootName:'VersioningConfiguration', renderOpts:{'pretty':false}, headless:true}) - var payload = builder.buildObject(versionConfig) + const method = 'PUT' + const query = 'versioning' + const builder = new xml2js.Builder({rootName:'VersioningConfiguration', renderOpts:{'pretty':false}, headless:true}) + const payload = builder.buildObject(versionConfig) this.makeRequest({method, bucketName, query}, payload, [200], '', false, cb) } @@ -2446,13 +2539,13 @@ export class Client { * putOpts _object_ (Optional) e.g {versionId:"my-object-version-id"}, * cb(error)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - setTagging(taggingParams){ + setTagging(taggingParams: { bucketName: any; tags: any; cb: any; objectName?: any; putOpts?: any }) { const { bucketName, objectName, tags, putOpts={}, cb} = taggingParams const method = 'PUT' - let query ="tagging" + let query ='tagging' - if(putOpts && putOpts.versionId){ + if (putOpts && putOpts.versionId) { query =`${query}&versionId=${putOpts.versionId}` } const tagsList=[] @@ -2468,13 +2561,13 @@ export class Client { } const encoder = new TextEncoder() const headers ={} - const builder = new xml2js.Builder({ headless:true,renderOpts:{'pretty':false},}) + const builder = new xml2js.Builder({ headless:true, renderOpts:{'pretty':false}}) let payload = builder.buildObject(taggingConfig) payload = encoder.encode(payload) headers['Content-MD5'] = toMd5(payload) const requestOptions = { method, bucketName, query, headers } - if(objectName){ + if (objectName) { requestOptions['objectName']=objectName } headers['Content-MD5'] = toMd5(payload) @@ -2489,14 +2582,14 @@ export class Client { * tags _object_ of the form {'':'','':''} * `cb(error)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - setBucketTagging(bucketName,tags,cb){ + setBucketTagging(bucketName: string, tags: {}, cb: any) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } - if(!isObject(tags)){ + if (!isObject(tags)) { throw new errors.InvalidArgumentError('tags should be of type "object"') } - if(Object.keys(tags).length > 10){ + if (Object.keys(tags).length > 10) { throw new errors.InvalidArgumentError('maximum tags allowed is 10"') } if (!isFunction(cb)) { @@ -2514,7 +2607,7 @@ export class Client { * putOpts _object_ (Optional) e.g {versionId:"my-object-version-id"}, * `cb(error)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - setObjectTagging(bucketName, objectName, tags, putOpts={}, cb){ + setObjectTagging(bucketName: string, objectName: string, tags: {}, putOpts={}, cb: {}) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2522,15 +2615,15 @@ export class Client { throw new errors.InvalidBucketNameError('Invalid object name: ' + objectName) } - if(isFunction(putOpts)){ + if (isFunction(putOpts)) { cb=putOpts putOpts={} } - if(!isObject(tags)){ + if (!isObject(tags)) { throw new errors.InvalidArgumentError('tags should be of type "object"') } - if(Object.keys(tags).length > 10){ + if (Object.keys(tags).length > 10) { throw new errors.InvalidArgumentError('Maximum tags allowed is 10"') } @@ -2547,9 +2640,9 @@ export class Client { * removeOpts _object_ (Optional) e.g {versionId:"my-object-version-id"}, * `cb(error)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - removeTagging({bucketName, objectName, removeOpts, cb}){ + removeTagging({bucketName, objectName, removeOpts, cb}) { const method = 'DELETE' - let query ="tagging" + let query ='tagging' if (removeOpts && Object.keys(removeOpts).length && removeOpts.versionId) { query =`${query}&versionId=${removeOpts.versionId}` @@ -2567,7 +2660,7 @@ export class Client { * bucketName _string_ * `cb(error)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - removeBucketTagging(bucketName, cb){ + removeBucketTagging(bucketName: string, cb: any) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2584,7 +2677,7 @@ export class Client { * removeOpts _object_ (Optional) e.g. {VersionID:"my-object-version-id"} * `cb(error)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - removeObjectTagging(bucketName, objectName, removeOpts, cb){ + removeObjectTagging(bucketName: string, objectName: string, removeOpts: {}, cb: any) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) @@ -2592,11 +2685,11 @@ export class Client { if (!isValidObjectName(objectName)) { throw new errors.InvalidBucketNameError('Invalid object name: ' + objectName) } - if(isFunction(removeOpts)){ + if (isFunction(removeOpts)) { cb=removeOpts removeOpts={} } - if(removeOpts && Object.keys(removeOpts).length && !isObject(removeOpts)){ + if (removeOpts && Object.keys(removeOpts).length && !isObject(removeOpts)) { throw new errors.InvalidArgumentError('removeOpts should be of type "object"') } @@ -2612,15 +2705,15 @@ export class Client { * bucketName _string_ * `cb(error, tags)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - getBucketTagging(bucketName, cb){ + getBucketTagging(bucketName: any, cb: (arg0: Error | null, arg1: undefined) => void) { const method = 'GET' - const query ="tagging" + const query ='tagging' const requestOptions = { method, bucketName, query } this.makeRequest(requestOptions, '', [200], '', true, (e, response) => { - var transformer = transformers.getTagsTransformer() + const transformer = transformers.getTagsTransformer() if (e) return cb(e) - let tagsList + let tagsList: any pipesetup(response, transformer) .on('data', result => tagsList = result) .on('error', e => cb(e)) @@ -2634,39 +2727,39 @@ export class Client { * getOpts _object_ (Optional) e.g {versionId:"my-object-version-id"} * `cb(error, tags)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - getObjectTagging(bucketName, objectName, getOpts={}, cb=()=>false){ + getObjectTagging(bucketName: string, objectName: string, getOpts={}, cb=()=>false) { const method = 'GET' - let query ="tagging" + let query ='tagging' - if(!isValidBucketName(bucketName)) { + if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } - if(!isValidObjectName(objectName)) { + if (!isValidObjectName(objectName)) { throw new errors.InvalidBucketNameError('Invalid object name: ' + objectName) } - if(isFunction(getOpts)){ + if (isFunction(getOpts)) { cb=getOpts getOpts={} } - if(!isObject(getOpts)){ + if (!isObject(getOpts)) { throw new errors.InvalidArgumentError('getOpts should be of type "object"') } if (!isFunction(cb)) { throw new TypeError('callback should be of type "function"') } - if(getOpts && getOpts.versionId){ + if (getOpts && getOpts.versionId) { query =`${query}&versionId=${getOpts.versionId}` } const requestOptions = { method, bucketName, query } - if(objectName){ + if (objectName) { requestOptions['objectName']=objectName } this.makeRequest(requestOptions, '', [200], '', true, (e, response) => { const transformer = transformers.getTagsTransformer() if (e) return cb(e) - let tagsList + let tagsList: any pipesetup(response, transformer) .on('data', result => tagsList = result) .on('error', e => cb(e)) @@ -2681,13 +2774,13 @@ export class Client { * policyConfig _object_ a valid policy configuration object. * `cb(error)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - applyBucketLifecycle(bucketName, policyConfig, cb){ + applyBucketLifecycle(bucketName: string, policyConfig: string | null, cb: { (err: Error | null): void; (err: Error | null, response?: Http.IncomingMessage | undefined): void }) { const method = 'PUT' - const query="lifecycle" + const query='lifecycle' const encoder = new TextEncoder() const headers ={} - const builder = new xml2js.Builder({ rootName:'LifecycleConfiguration', headless:true, renderOpts:{'pretty':false},}) + const builder = new xml2js.Builder({ rootName:'LifecycleConfiguration', headless:true, renderOpts:{'pretty':false}}) let payload = builder.buildObject(policyConfig) payload = encoder.encode(payload) const requestOptions = { method, bucketName, query, headers } @@ -2700,12 +2793,12 @@ export class Client { * bucketName _string_ * `cb(error)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - removeBucketLifecycle(bucketName, cb){ + removeBucketLifecycle(bucketName: string, cb: (err: Error | null) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } const method = 'DELETE' - const query="lifecycle" + const query='lifecycle' this.makeRequest({method, bucketName, query}, '', [204], '', false, cb) } @@ -2714,13 +2807,13 @@ export class Client { * lifeCycleConfig _object_ one of the following values: (null or '') to remove the lifecycle configuration. or a valid lifecycle configuration * `cb(error)` _function_ - callback function with `err` as the error argument. `err` is null if the operation is successful. */ - setBucketLifecycle(bucketName, lifeCycleConfig=null, cb){ + setBucketLifecycle(bucketName: string, lifeCycleConfig: string | null = null, cb: (err: Error | null) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } - if(_.isEmpty(lifeCycleConfig)){ + if (lifeCycleConfig != null && lifeCycleConfig !== '') { this.removeBucketLifecycle(bucketName, cb) - }else { + } else { this.applyBucketLifecycle(bucketName, lifeCycleConfig, cb) } } @@ -2729,18 +2822,18 @@ export class Client { * bucketName _string_ * `cb(config)` _function_ - callback function with lifecycle configuration as the error argument. */ - getBucketLifecycle(bucketName, cb){ + getBucketLifecycle(bucketName: string, cb: (arg0: Error | null, arg1: undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } const method = 'GET' - const query ="lifecycle" + const query ='lifecycle' const requestOptions = { method, bucketName, query } this.makeRequest(requestOptions, '', [200], '', true, (e, response) => { const transformer = transformers.lifecycleTransformer() if (e) return cb(e) - let lifecycleConfig + let lifecycleConfig: any pipesetup(response, transformer) .on('data', result => lifecycleConfig = result) .on('error', e => cb(e)) @@ -2749,7 +2842,7 @@ export class Client { } - setObjectLockConfig(bucketName, lockConfigOpts={}, cb) { + setObjectLockConfig(bucketName: string, lockConfigOpts={}, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { const retentionModes = [RETENTION_MODES.COMPLIANCE, RETENTION_MODES.GOVERNANCE] const validUnits = [RETENTION_VALIDITY_UNITS.DAYS, RETENTION_VALIDITY_UNITS.YEARS] @@ -2761,24 +2854,24 @@ export class Client { if (lockConfigOpts.mode && !retentionModes.includes(lockConfigOpts.mode)) { throw new TypeError(`lockConfigOpts.mode should be one of ${retentionModes}`) } - if (lockConfigOpts.unit && !validUnits.includes(lockConfigOpts.unit)){ + if (lockConfigOpts.unit && !validUnits.includes(lockConfigOpts.unit)) { throw new TypeError(`lockConfigOpts.unit should be one of ${validUnits}`) } - if (lockConfigOpts.validity && !isNumber(lockConfigOpts.validity)){ - throw new TypeError(`lockConfigOpts.validity should be a number`) + if (lockConfigOpts.validity && !isNumber(lockConfigOpts.validity)) { + throw new TypeError('lockConfigOpts.validity should be a number') } const method = 'PUT' - const query = "object-lock" + const query = 'object-lock' - let config={ - ObjectLockEnabled:"Enabled" + const config={ + ObjectLockEnabled:'Enabled' } const configKeys = Object.keys(lockConfigOpts) // Check if keys are present and all keys are present. - if(configKeys.length > 0){ - if(_.difference(configKeys, ['unit','mode','validity']).length !== 0){ - throw new TypeError(`lockConfigOpts.mode,lockConfigOpts.unit,lockConfigOpts.validity all the properties should be specified.`) + if (configKeys.length > 0) { + if (_.difference(configKeys, ['unit', 'mode', 'validity']).length !== 0) { + throw new TypeError('lockConfigOpts.mode,lockConfigOpts.unit,lockConfigOpts.validity all the properties should be specified.') } else { config.Rule={ DefaultRetention:{} @@ -2803,7 +2896,7 @@ export class Client { this.makeRequest({method, bucketName, query, headers}, payload, [200], '', false, cb) } - getObjectLockConfig(bucketName, cb) { + getObjectLockConfig(bucketName: string, cb: ((...args: any[]) => void) | ((arg0: Error | null, arg1: Buffer | undefined) => void)) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2811,7 +2904,7 @@ export class Client { throw new errors.InvalidArgumentError('callback should be of type "function"') } const method = 'GET' - const query = "object-lock" + const query = 'object-lock' this.makeRequest({method, bucketName, query}, '', [200], '', true, (e, response) => { if (e) return cb(e) @@ -2828,7 +2921,7 @@ export class Client { }) } - putObjectRetention(bucketName, objectName, retentionOpts={}, cb) { + putObjectRetention(bucketName: string, objectName: string, retentionOpts={}, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2839,16 +2932,16 @@ export class Client { throw new errors.InvalidArgumentError('retentionOpts should be of type "object"') } else { if (retentionOpts.governanceBypass && !isBoolean(retentionOpts.governanceBypass)) { - throw new errors.InvalidArgumentError('Invalid value for governanceBypass',retentionOpts.governanceBypass) + throw new errors.InvalidArgumentError('Invalid value for governanceBypass', retentionOpts.governanceBypass) } - if (retentionOpts.mode && ![RETENTION_MODES.COMPLIANCE,RETENTION_MODES.GOVERNANCE].includes((retentionOpts.mode))) { + if (retentionOpts.mode && ![RETENTION_MODES.COMPLIANCE, RETENTION_MODES.GOVERNANCE].includes(retentionOpts.mode)) { throw new errors.InvalidArgumentError('Invalid object retention mode ', retentionOpts.mode) } if (retentionOpts.retainUntilDate && !isString(retentionOpts.retainUntilDate)) { - throw new errors.InvalidArgumentError('Invalid value for retainUntilDate',retentionOpts.retainUntilDate) + throw new errors.InvalidArgumentError('Invalid value for retainUntilDate', retentionOpts.retainUntilDate) } if (retentionOpts.versionId && !isString(retentionOpts.versionId)) { - throw new errors.InvalidArgumentError('Invalid value for versionId',retentionOpts.versionId) + throw new errors.InvalidArgumentError('Invalid value for versionId', retentionOpts.versionId) } } if (!isFunction(cb)) { @@ -2856,54 +2949,54 @@ export class Client { } const method = 'PUT' - let query = "retention" + let query = 'retention' const headers = {} - if(retentionOpts.governanceBypass){ - headers["X-Amz-Bypass-Governance-Retention"]=true + if (retentionOpts.governanceBypass) { + headers['X-Amz-Bypass-Governance-Retention']=true } const builder = new xml2js.Builder({rootName:'Retention', renderOpts:{'pretty':false}, headless:true}) const params ={} - if(retentionOpts.mode){ + if (retentionOpts.mode) { params.Mode =retentionOpts.mode } - if(retentionOpts.retainUntilDate){ + if (retentionOpts.retainUntilDate) { params.RetainUntilDate =retentionOpts.retainUntilDate } - if(retentionOpts.versionId){ + if (retentionOpts.versionId) { query += `&versionId=${retentionOpts.versionId}` } - let payload = builder.buildObject(params) + const payload = builder.buildObject(params) headers['Content-MD5'] = toMd5(payload) this.makeRequest({method, bucketName, objectName, query, headers}, payload, [200, 204], '', false, cb) } - getObjectRetention(bucketName ,objectName, getOpts, cb) { + getObjectRetention(bucketName: string, objectName: string, getOpts: { versionId: any }, cb: ((...args: any[]) => void) | ((arg0: Error | null, arg1: Buffer | undefined) => void)) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } if (!isValidObjectName(objectName)) { throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`) } - if(!isObject(getOpts)){ + if (!isObject(getOpts)) { throw new errors.InvalidArgumentError('callback should be of type "object"') - }else if(getOpts.versionId && !isString(getOpts.versionId)){ + } else if (getOpts.versionId && !isString(getOpts.versionId)) { throw new errors.InvalidArgumentError('VersionID should be of type "string"') } if (cb && !isFunction(cb)) { throw new errors.InvalidArgumentError('callback should be of type "function"') } const method = 'GET' - let query = "retention" - if(getOpts.versionId){ + let query = 'retention' + if (getOpts.versionId) { query += `&versionId=${getOpts.versionId}` } - this.makeRequest({method, bucketName,objectName, query}, '', [200], '', true, (e, response) => { + this.makeRequest({method, bucketName, objectName, query}, '', [200], '', true, (e, response) => { if (e) return cb(e) let retentionConfig = Buffer.from('') @@ -2919,17 +3012,17 @@ export class Client { } - setBucketEncryption(bucketName, encryptionConfig, cb) { + setBucketEncryption(bucketName: string, encryptionConfig: { Rule: string | any[] } | null, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } - if(isFunction(encryptionConfig)){ + if (isFunction(encryptionConfig)) { cb= encryptionConfig encryptionConfig = null } - if(!_.isEmpty(encryptionConfig) && encryptionConfig.Rule.length >1){ + if (!_.isEmpty(encryptionConfig) && encryptionConfig.Rule.length >1) { throw new errors.InvalidArgumentError('Invalid Rule length. Only one rule is allowed.: ' + encryptionConfig.Rule) } if (cb && !isFunction(cb)) { @@ -2937,31 +3030,31 @@ export class Client { } let encryptionObj =encryptionConfig - if(_.isEmpty(encryptionConfig)) { + if (_.isEmpty(encryptionConfig)) { encryptionObj={ // Default MinIO Server Supported Rule Rule:[ { ApplyServerSideEncryptionByDefault: { - SSEAlgorithm:"AES256" + SSEAlgorithm:'AES256' } } ] }} - let method = 'PUT' - let query = "encryption" - let builder = new xml2js.Builder({rootName:'ServerSideEncryptionConfiguration', renderOpts:{'pretty':false}, headless:true}) - let payload = builder.buildObject(encryptionObj) + const method = 'PUT' + const query = 'encryption' + const builder = new xml2js.Builder({rootName:'ServerSideEncryptionConfiguration', renderOpts:{'pretty':false}, headless:true}) + const payload = builder.buildObject(encryptionObj) const headers = {} headers['Content-MD5'] =toMd5(payload) - this.makeRequest({method, bucketName, query,headers}, payload, [200], '', false, cb) + this.makeRequest({method, bucketName, query, headers}, payload, [200], '', false, cb) } - getBucketEncryption(bucketName, cb) { + getBucketEncryption(bucketName: string, cb: ((...args: any[]) => void) | ((arg0: Error | null, arg1: Buffer | undefined) => void)) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2969,7 +3062,7 @@ export class Client { throw new errors.InvalidArgumentError('callback should be of type "function"') } const method = 'GET' - const query = "encryption" + const query = 'encryption' this.makeRequest({method, bucketName, query}, '', [200], '', true, (e, response) => { if (e) return cb(e) @@ -2985,7 +3078,7 @@ export class Client { }) }) } - removeBucketEncryption(bucketName, cb) { + removeBucketEncryption(bucketName: string, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -2993,13 +3086,13 @@ export class Client { throw new errors.InvalidArgumentError('callback should be of type "function"') } const method = 'DELETE' - const query = "encryption" + const query = 'encryption' this.makeRequest({method, bucketName, query}, '', [204], '', false, cb) } - setBucketReplication(bucketName, replicationConfig={}, cb) { + setBucketReplication(bucketName: string, replicationConfig={}, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -3008,7 +3101,7 @@ export class Client { } else { if (_.isEmpty(replicationConfig.role)) { throw new errors.InvalidArgumentError('Role cannot be empty') - }else if (replicationConfig.role && !isString(replicationConfig.role)) { + } else if (replicationConfig.role && !isString(replicationConfig.role)) { throw new errors.InvalidArgumentError('Invalid value for role', replicationConfig.role) } if (_.isEmpty(replicationConfig.rules)) { @@ -3020,7 +3113,7 @@ export class Client { } const method = 'PUT' - let query = "replication" + const query = 'replication' const headers = {} const replicationParamsConfig = { @@ -3030,16 +3123,16 @@ export class Client { } } - const builder = new xml2js.Builder({ renderOpts:{'pretty':false},headless: true }) + const builder = new xml2js.Builder({ renderOpts:{'pretty':false}, headless: true }) - let payload = builder.buildObject(replicationParamsConfig) + const payload = builder.buildObject(replicationParamsConfig) headers['Content-MD5'] =toMd5(payload) - this.makeRequest({method, bucketName, query, headers}, payload, [200], '', false, cb) + this.makeRequest({method, bucketName, query, headers}, payload, [200], '', false, cb) } - getBucketReplication(bucketName, cb) { + getBucketReplication(bucketName: string, cb: ((...args: any[]) => void) | ((arg0: Error | null, arg1: Buffer | undefined) => void)) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -3047,7 +3140,7 @@ export class Client { throw new errors.InvalidArgumentError('callback should be of type "function"') } const method = 'GET' - const query = "replication" + const query = 'replication' this.makeRequest({method, bucketName, query}, '', [200], '', true, (e, response) => { if (e) return cb(e) @@ -3064,17 +3157,17 @@ export class Client { }) } - removeBucketReplication(bucketName, cb){ + removeBucketReplication(bucketName: string, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } const method = 'DELETE' - const query="replication" + const query='replication' this.makeRequest({method, bucketName, query}, '', [200, 204], '', false, cb) } - getObjectLegalHold(bucketName, objectName, getOpts={}, cb){ + getObjectLegalHold(bucketName: string, objectName: string, getOpts={}, cb: {}) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -3082,15 +3175,15 @@ export class Client { throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`) } - if(isFunction(getOpts)){ + if (isFunction(getOpts)) { cb= getOpts getOpts = {} } - if (!isObject(getOpts)) { + if (!isObject(getOpts)) { throw new TypeError('getOpts should be of type "Object"') - } else if(Object.keys(getOpts).length> 0 && getOpts.versionId && !isString((getOpts.versionId))){ - throw new TypeError('versionId should be of type string.:',getOpts.versionId ) + } else if (Object.keys(getOpts).length> 0 && getOpts.versionId && !isString(getOpts.versionId)) { + throw new TypeError('versionId should be of type string.:', getOpts.versionId ) } @@ -3099,9 +3192,9 @@ export class Client { } const method = 'GET' - let query = "legal-hold" + let query = 'legal-hold' - if (getOpts.versionId){ + if (getOpts.versionId) { query +=`&versionId=${getOpts.versionId}` } @@ -3121,7 +3214,7 @@ export class Client { } - setObjectLegalHold(bucketName, objectName, setOpts={}, cb){ + setObjectLegalHold(bucketName: string, objectName: string, setOpts={}, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName) } @@ -3132,19 +3225,19 @@ export class Client { const defaultOpts = { status:LEGAL_HOLD_STATUS.ENABLED } - if(isFunction(setOpts)){ + if (isFunction(setOpts)) { cb= setOpts setOpts =defaultOpts } if (!isObject(setOpts)) { throw new TypeError('setOpts should be of type "Object"') - }else { + } else { - if(![LEGAL_HOLD_STATUS.ENABLED, LEGAL_HOLD_STATUS.DISABLED].includes((setOpts.status))){ + if (![LEGAL_HOLD_STATUS.ENABLED, LEGAL_HOLD_STATUS.DISABLED].includes(setOpts.status)) { throw new TypeError('Invalid status: '+setOpts.status ) } - if(setOpts.versionId && !setOpts.versionId.length){ + if (setOpts.versionId && !setOpts.versionId.length) { throw new TypeError('versionId should be of type string.:'+ setOpts.versionId ) } } @@ -3153,20 +3246,20 @@ export class Client { throw new errors.InvalidArgumentError('callback should be of type "function"') } - if( _.isEmpty(setOpts)){ + if ( _.isEmpty(setOpts)) { setOpts={ defaultOpts } } const method = 'PUT' - let query = "legal-hold" + let query = 'legal-hold' - if (setOpts.versionId){ + if (setOpts.versionId) { query +=`&versionId=${setOpts.versionId}` } - let config={ + const config={ Status: setOpts.status } @@ -3177,32 +3270,32 @@ export class Client { this.makeRequest({method, bucketName, objectName, query, headers}, payload, [200], '', false, cb) } - async setCredentialsProvider(credentialsProvider){ - if(!(credentialsProvider instanceof CredentialProvider)){ - throw new Error("Unable to get credentials. Expected instance of CredentialProvider") + async setCredentialsProvider(credentialsProvider: any) { + if (!(credentialsProvider instanceof CredentialProvider)) { + throw new Error('Unable to get credentials. Expected instance of CredentialProvider') } this.credentialsProvider = credentialsProvider await this.checkAndRefreshCreds() } - async checkAndRefreshCreds(){ - if(this.credentialsProvider ) { - return await this.fetchCredentials() + async checkAndRefreshCreds() { + if (this.credentialsProvider ) { + return await this.fetchCredentials() } } - async fetchCredentials(){ - if(this.credentialsProvider ){ + async fetchCredentials() { + if (this.credentialsProvider ) { const credentialsConf = await this.credentialsProvider.getCredentials() - if(credentialsConf) { - this.accessKey = credentialsConf.getAccessKey() - this.secretKey = credentialsConf.getSecretKey() - this.sessionToken = credentialsConf.getSessionToken() - }else{ - throw new Error("Unable to get credentials. Expected instance of BaseCredentialsProvider") + if (credentialsConf) { + this.accessKey = credentialsConf.accessKey() + this.secretKey = credentialsConf.secretKey() + this.sessionToken = credentialsConf.sessionToken() + } else { + throw new Error('Unable to get credentials. Expected instance of BaseCredentialsProvider') } - }else{ - throw new Error("Unable to get credentials. Expected instance of BaseCredentialsProvider") + } else { + throw new Error('Unable to get credentials. Expected instance of BaseCredentialsProvider') } } @@ -3213,9 +3306,9 @@ export class Client { * @param uploadId __string__ id of a multipart upload to cancel during compose object sequence. * @param cb __function__ callback function */ - abortMultipartUpload(bucketName, objectName, uploadId, cb){ + abortMultipartUpload(bucketName: any, objectName: any, uploadId: any, cb: (err: Error | null, response?: Http.IncomingMessage | undefined) => void) { const method = 'DELETE' - let query =`uploadId=${uploadId}` + const query =`uploadId=${uploadId}` const requestOptions = { method, bucketName, objectName:objectName, query } this.makeRequest(requestOptions, '', [204], '', false, cb) @@ -3231,15 +3324,15 @@ export class Client { * headers __object__ * @param cb called with null incase of error. */ - uploadPartCopy (partConfig , cb) { + uploadPartCopy (partConfig: { bucketName: any; objectName: any; uploadID: any; partNumber: any; headers: any }, cb: ((...args: any[]) => void) | ((arg0: Error | null, arg1: { etag: string; key: any; part: any } | undefined) => void)) { const { - bucketName, objectName, uploadID, partNumber , headers + bucketName, objectName, uploadID, partNumber, headers } = partConfig const method = 'PUT' - let query =`uploadId=${uploadID}&partNumber=${partNumber}` + const query =`uploadId=${uploadID}&partNumber=${partNumber}` const requestOptions = { method, bucketName, objectName:objectName, query, headers } - return this.makeRequest(requestOptions, '', [200], '', true,(e, response) => { + return this.makeRequest(requestOptions, '', [200], '', true, (e, response) => { let partCopyResult = Buffer.from('') if (e) return cb(e) pipesetup(response, transformers.uploadPartTransformer()) @@ -3248,7 +3341,7 @@ export class Client { }) .on('error', cb) .on('end', () => { - let uploadPartCopyRes = { + const uploadPartCopyRes = { etag:sanitizeETag(partCopyResult.ETag), key:objectName, part:partNumber @@ -3260,14 +3353,14 @@ export class Client { ) } - composeObject (destObjConfig={}, sourceObjList=[], cb){ + composeObject (destObjConfig={}, sourceObjList=[], cb: (arg0: any, arg1: null) => void) { const me = this // many async flows. so store the ref. const sourceFilesLength = sourceObjList.length - if(!(isArray(sourceObjList ))){ + if (!isArray(sourceObjList )) { throw new errors.InvalidArgumentError('sourceConfig should an array of CopySourceOptions ') } - if(!(destObjConfig instanceof CopyDestinationOptions )){ + if (!(destObjConfig instanceof CopyDestinationOptions )) { throw new errors.InvalidArgumentError('destConfig should of type CopyDestinationOptions ') } @@ -3279,34 +3372,34 @@ export class Client { throw new TypeError('callback should be of type "function"') } - for(let i=0;i{ + const getStatOptions = (srcConfig: never) =>{ let statOpts = {} - if(!_.isEmpty(srcConfig.VersionID)) { + if (!_.isEmpty(srcConfig.VersionID)) { statOpts= { versionId: srcConfig.VersionID } } return statOpts } - const srcObjectSizes=[] + const srcObjectSizes: any[]=[] let totalSize=0 let totalParts=0 - const sourceObjStats = sourceObjList.map( (srcItem) => me.statObject(srcItem.Bucket, srcItem.Object, getStatOptions(srcItem)) ) + const sourceObjStats = sourceObjList.map( (srcItem) => me.statObject(srcItem.Bucket, srcItem.Object, getStatOptions(srcItem)) ) - return Promise.all(sourceObjStats).then(srcObjectInfos =>{ + return Promise.all(sourceObjStats).then(srcObjectInfos =>{ - const validatedStats = srcObjectInfos.map( (resItemStat, index)=>{ + const validatedStats = srcObjectInfos.map( (resItemStat, index)=>{ const srcConfig = sourceObjList[index] @@ -3319,7 +3412,7 @@ export class Client { // so only invalid case to check is: const srcStart = srcConfig.Start const srcEnd = srcConfig.End - if (srcEnd >= srcCopySize || srcStart < 0 ){ + if (srcEnd >= srcCopySize || srcStart < 0 ) { throw new errors.InvalidArgumentError(`CopySrcOptions ${index} has invalid segment-to-copy [${srcStart}, ${srcEnd}] (size is ${srcCopySize})`) } srcCopySize = srcEnd - srcStart + 1 @@ -3342,7 +3435,7 @@ export class Client { // calculate parts needed for current source totalParts += partsRequired(srcCopySize) // Do we need more parts than we are allowed? - if (totalParts > PART_CONSTRAINTS.MAX_PARTS_COUNT ){ + if (totalParts > PART_CONSTRAINTS.MAX_PARTS_COUNT ) { throw new errors.InvalidArgumentError(`Your proposed compose object requires more than ${PART_CONSTRAINTS.MAX_PARTS_COUNT} parts`) } @@ -3355,7 +3448,7 @@ export class Client { } // preserve etag to avoid modification of object while copying. - for(let i=0;i { const { startIndex: startIdx, endIndex: endIdx, - objInfo: objConfig, + objInfo: objConfig } = splitSize - let partIndex = splitIndex + 1 // part index starts from 1. + const partIndex = splitIndex + 1 // part index starts from 1. const totalUploads = Array.from(startIdx) const headers = sourceObjList[splitIndex].getHeaders() totalUploads.forEach((splitStart, upldCtrIdx) => { - let splitEnd = endIdx[upldCtrIdx] + const splitEnd = endIdx[upldCtrIdx] const sourceObj = `${objConfig.Bucket}/${objConfig.Object}` headers['x-amz-copy-source'] = `${sourceObj}` - headers["x-amz-copy-source-range"] = `bytes=${splitStart}-${splitEnd}` + headers['x-amz-copy-source-range'] = `bytes=${splitStart}-${splitEnd}` const uploadPartConfig = { bucketName: destObjConfig.Bucket, @@ -3405,15 +3498,15 @@ export class Client { return uploadPartConfigList } - const performUploadParts = (uploadId) =>{ + const performUploadParts = (uploadId: any) =>{ const uploadList = getUploadPartConfigList(uploadId) - async.map(uploadList, me.uploadPartCopy.bind(me), (err, res)=>{ - if(err){ + async.map(uploadList, me.uploadPartCopy.bind(me), (err: any, res: any[])=>{ + if (err) { return this.abortMultipartUpload(destObjConfig.Bucket, destObjConfig.Object, uploadId, cb) } - const partsDone = res.map((partCopy)=>({etag:partCopy.etag, part:partCopy.part})) + const partsDone = res.map((partCopy: { etag: any; part: any })=>({etag:partCopy.etag, part:partCopy.part})) return me.completeMultipartUpload(destObjConfig.Bucket, destObjConfig.Object, uploadId, partsDone, cb) }) @@ -3421,8 +3514,8 @@ export class Client { const newUploadHeaders = destObjConfig.getHeaders() - me.initiateNewMultipartUpload(destObjConfig.Bucket, destObjConfig.Object, newUploadHeaders, (err, uploadId)=>{ - if(err){ + me.initiateNewMultipartUpload(destObjConfig.Bucket, destObjConfig.Object, newUploadHeaders, (err: any, uploadId: any)=>{ + if (err) { return cb(err, null) } performUploadParts(uploadId) @@ -3434,34 +3527,34 @@ export class Client { }) } - selectObjectContent(bucketName, objectName, selectOpts={}, cb) { + selectObjectContent(bucketName: string, objectName: string, selectOpts={}, cb: ((...args: any[]) => void) | ((arg0: Error | null, arg1: undefined) => void)) { if (!isValidBucketName(bucketName)) { throw new errors.InvalidBucketNameError(`Invalid bucket name: ${bucketName}`) } if (!isValidObjectName(objectName)) { throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`) } - if(!_.isEmpty(selectOpts)){ + if (!_.isEmpty(selectOpts)) { if (!isString(selectOpts.expression)) { throw new TypeError('sqlExpression should be of type "string"') } - if(!_.isEmpty(selectOpts.inputSerialization)) { + if (!_.isEmpty(selectOpts.inputSerialization)) { if (!isObject(selectOpts.inputSerialization)) { throw new TypeError('inputSerialization should be of type "object"') } - }else{ + } else { throw new TypeError('inputSerialization is required') } - if(!_.isEmpty(selectOpts.outputSerialization)) { + if (!_.isEmpty(selectOpts.outputSerialization)) { if (!isObject(selectOpts.outputSerialization)) { throw new TypeError('outputSerialization should be of type "object"') } - }else{ + } else { throw new TypeError('outputSerialization is required') } - }else{ + } else { throw new TypeError('valid select configuration is required') } @@ -3470,34 +3563,34 @@ export class Client { } const method = 'POST' - let query = `select` - query += "&select-type=2" + let query = 'select' + query += '&select-type=2' const config = [ { - "Expression": selectOpts.expression + 'Expression': selectOpts.expression }, { - "ExpressionType":selectOpts.expressionType || "SQL" + 'ExpressionType':selectOpts.expressionType || 'SQL' }, { - "InputSerialization": [selectOpts.inputSerialization] + 'InputSerialization': [selectOpts.inputSerialization] }, { - "OutputSerialization": [selectOpts.outputSerialization] + 'OutputSerialization': [selectOpts.outputSerialization] } ] // Optional - if(selectOpts.requestProgress){ + if (selectOpts.requestProgress) { config.push( - {"RequestProgress":selectOpts.requestProgress} + {'RequestProgress':selectOpts.requestProgress} ) } // Optional - if(selectOpts.scanRange){ + if (selectOpts.scanRange) { config.push( - {"ScanRange": selectOpts.scanRange} + {'ScanRange': selectOpts.scanRange} ) } @@ -3510,7 +3603,7 @@ export class Client { this.makeRequest({method, bucketName, objectName, query}, payload, [200], '', true, (e, response) => { if (e) return cb(e) - let selectResult + let selectResult: SelectResults | undefined pipesetup(response, transformers.selectObjectContentTransformer()) .on('data', data => { selectResult = parseSelectObjectContentResponse(data) @@ -3523,7 +3616,7 @@ export class Client { } get extensions() { - if(!this.clientExtensions) + if (!this.clientExtensions) { this.clientExtensions = new extensions(this) } @@ -3583,134 +3676,5 @@ Client.prototype.getObjectLegalHold=promisify(Client.prototype.getObjectLegalHol Client.prototype.composeObject = promisify(Client.prototype.composeObject) Client.prototype.selectObjectContent=promisify(Client.prototype.selectObjectContent) -export class CopyConditions { - constructor() { - this.modified = "" - this.unmodified = "" - this.matchETag = "" - this.matchETagExcept = "" - } - - setModified(date) { - if (!(date instanceof Date)) - throw new TypeError('date must be of type Date') - - this.modified = date.toUTCString() - } - - setUnmodified(date) { - if (!(date instanceof Date)) - throw new TypeError('date must be of type Date') - - this.unmodified = date.toUTCString() - } - - setMatchETag(etag) { - this.matchETag = etag - } - - setMatchETagExcept(etag) { - this.matchETagExcept = etag - } -} - -// Build PostPolicy object that can be signed by presignedPostPolicy -export class PostPolicy { - constructor() { - this.policy = { - conditions: [] - } - this.formData = {} - } - - // set expiration date - setExpires(date) { - if (!date) { - throw new errors.InvalidDateError('Invalid date : cannot be null') - } - this.policy.expiration = date.toISOString() - } - - // set object name - setKey(objectName) { - if (!isValidObjectName(objectName)) { - throw new errors.InvalidObjectNameError(`Invalid object name : ${objectName}`) - } - this.policy.conditions.push(['eq', '$key', objectName]) - this.formData.key = objectName - } - - // set object name prefix, i.e policy allows any keys with this prefix - setKeyStartsWith(prefix) { - if (!isValidPrefix(prefix)) { - throw new errors.InvalidPrefixError(`Invalid prefix : ${prefix}`) - } - this.policy.conditions.push(['starts-with', '$key', prefix]) - this.formData.key = prefix - } - - // set bucket name - setBucket(bucketName) { - if (!isValidBucketName(bucketName)) { - throw new errors.InvalidBucketNameError(`Invalid bucket name : ${bucketName}`) - } - this.policy.conditions.push(['eq', '$bucket', bucketName]) - this.formData.bucket = bucketName - } - - // set Content-Type - setContentType(type) { - if (!type) { - throw new Error('content-type cannot be null') - } - this.policy.conditions.push(['eq', '$Content-Type', type]) - this.formData['Content-Type'] = type - } - - // set Content-Type prefix, i.e image/ allows any image - setContentTypeStartsWith(prefix) { - if (!prefix) { - throw new Error('content-type cannot be null') - } - this.policy.conditions.push(['starts-with', '$Content-Type', prefix]) - this.formData['Content-Type'] = prefix - } - - // set Content-Disposition - setContentDisposition(value) { - if (!value) { - throw new Error('content-disposition cannot be null') - } - this.policy.conditions.push(['eq', '$Content-Disposition', value]) - this.formData['Content-Disposition'] = value - } - - // set minimum/maximum length of what Content-Length can be. - setContentLengthRange(min, max) { - if (min > max) { - throw new Error('min cannot be more than max') - } - if (min < 0) { - throw new Error('min should be > 0') - } - if (max < 0) { - throw new Error('max should be > 0') - } - this.policy.conditions.push(['content-length-range', min, max]) - } - - // set user defined metadata - setUserMetaData(metaData) { - if (!isObject(metaData)) { - throw new TypeError('metadata should be of type "object"') - } - Object.entries(metaData).forEach(([key, value]) => { - const amzMetaDataKey = `x-amz-meta-${key}` - this.policy.conditions.push(['eq', `$${amzMetaDataKey}`, value]) - this.formData[amzMetaDataKey] = value - }) - } -} - export * from './notification' export * from './helpers' diff --git a/src/main/notification.js b/src/main/notification.ts similarity index 79% rename from src/main/notification.js rename to src/main/notification.ts index 4a0537d8..9c8210df 100644 --- a/src/main/notification.js +++ b/src/main/notification.ts @@ -45,17 +45,17 @@ class TargetConfig { setId(id) { this.Id = id } - addEvent(newevent){ + addEvent(newevent) { if (!this.Event) this.Event = [] this.Event.push(newevent) } addFilterSuffix(suffix) { if (!this.Filter) this.Filter = {S3Key : {FilterRule:[]}} - this.Filter.S3Key.FilterRule.push({Name:"suffix", Value:suffix}) + this.Filter.S3Key.FilterRule.push({Name:'suffix', Value:suffix}) } addFilterPrefix(prefix) { if (!this.Filter) this.Filter = {S3Key : {FilterRule:[]}} - this.Filter.S3Key.FilterRule.push({Name:"prefix", Value:prefix}) + this.Filter.S3Key.FilterRule.push({Name:'prefix', Value:prefix}) } } @@ -84,19 +84,19 @@ export class CloudFunctionConfig extends TargetConfig { } export const buildARN = (partition, service, region, accountId, resource) => { - return "arn:" + partition + ":" + service + ":" + region + ":" + accountId + ":" + resource + return 'arn:' + partition + ':' + service + ':' + region + ':' + accountId + ':' + resource } -export const ObjectCreatedAll = "s3:ObjectCreated:*" -export const ObjectCreatedPut = "s3:ObjectCreated:Put" -export const ObjectCreatedPost = "s3:ObjectCreated:Post" -export const ObjectCreatedCopy = "s3:ObjectCreated:Copy" -export const ObjectCreatedCompleteMultipartUpload = "s3:ObjectCreated:CompleteMultipartUpload" -export const ObjectRemovedAll = "s3:ObjectRemoved:*" -export const ObjectRemovedDelete = "s3:ObjectRemoved:Delete" -export const ObjectRemovedDeleteMarkerCreated = "s3:ObjectRemoved:DeleteMarkerCreated" -export const ObjectReducedRedundancyLostObject = "s3:ReducedRedundancyLostObject" +export const ObjectCreatedAll = 's3:ObjectCreated:*' +export const ObjectCreatedPut = 's3:ObjectCreated:Put' +export const ObjectCreatedPost = 's3:ObjectCreated:Post' +export const ObjectCreatedCopy = 's3:ObjectCreated:Copy' +export const ObjectCreatedCompleteMultipartUpload = 's3:ObjectCreated:CompleteMultipartUpload' +export const ObjectRemovedAll = 's3:ObjectRemoved:*' +export const ObjectRemovedDelete = 's3:ObjectRemoved:Delete' +export const ObjectRemovedDeleteMarkerCreated = 's3:ObjectRemoved:DeleteMarkerCreated' +export const ObjectReducedRedundancyLostObject = 's3:ReducedRedundancyLostObject' // Poll for notifications, used in #listenBucketNotification. // Listening constitutes repeatedly requesting s3 whether or not any @@ -132,14 +132,14 @@ export class NotificationPoller extends EventEmitter { // Don't continue if we're looping again but are cancelled. if (this.ending) return - let method = 'GET' - var queries = [] + const method = 'GET' + const queries = [] if (this.prefix) { - var prefix = uriEscape(this.prefix) + const prefix = uriEscape(this.prefix) queries.push(`prefix=${prefix}`) } if (this.suffix) { - var suffix = uriEscape(this.suffix) + const suffix = uriEscape(this.suffix) queries.push(`suffix=${suffix}`) } if (this.events) { @@ -147,7 +147,7 @@ export class NotificationPoller extends EventEmitter { } queries.sort() - var query = '' + let query = '' if (queries.length > 0) { query = `${queries.join('&')}` } @@ -155,7 +155,7 @@ export class NotificationPoller extends EventEmitter { this.client.makeRequest({ method, bucketName: this.bucketName, query }, '', [200], region, true, (e, response) => { if (e) return this.emit('error', e) - let transformer = transformers.getNotificationTransformer() + const transformer = transformers.getNotificationTransformer() pipesetup(response, transformer) .on('data', result => { // Data is flushed periodically (every 5 seconds), so we should diff --git a/src/main/object-uploader.js b/src/main/object-uploader.ts similarity index 94% rename from src/main/object-uploader.js rename to src/main/object-uploader.ts index 9412d034..64b70c88 100644 --- a/src/main/object-uploader.js +++ b/src/main/object-uploader.ts @@ -17,7 +17,7 @@ import { Transform } from 'stream' import Crypto from 'crypto' import * as querystring from 'query-string' -import { getVersionId, sanitizeETag } from "./helpers" +import { getVersionId, sanitizeETag } from './helpers' // We extend Transform because Writable does not implement ._flush(). export default class ObjectUploader extends Transform { @@ -59,8 +59,8 @@ export default class ObjectUploader extends Transform { _transform(chunk, encoding, callback) { this.emptyStream = false - let method = 'PUT' - let headers = {'Content-Length': chunk.length} + const method = 'PUT' + const headers = {'Content-Length': chunk.length} let md5digest = '' // Calculate and set Content-MD5 header if SHA256 is not set. @@ -74,7 +74,7 @@ export default class ObjectUploader extends Transform { // stream. if (this.partNumber == 1 && chunk.length < this.partSize) { // PUT the chunk in a single request — use an empty query. - let options = { + const options = { method, // Set user metadata as this is not a multipart upload headers: Object.assign({}, this.metaData, headers), @@ -85,7 +85,7 @@ export default class ObjectUploader extends Transform { this.client.makeRequest(options, chunk, [200], '', true, (err, response) => { if (err) return callback(err) - let result = { + const result = { etag: sanitizeETag(response.headers.etag), versionId :getVersionId(response.headers) } @@ -156,15 +156,15 @@ export default class ObjectUploader extends Transform { } // Continue uploading various parts if we have initiated multipart upload. - let partNumber = this.partNumber++ + const partNumber = this.partNumber++ // Check to see if we've already uploaded this chunk. If the hash sums match, // we can skip to the next chunk. if (this.oldParts) { - let oldPart = this.oldParts[partNumber] + const oldPart = this.oldParts[partNumber] // Calulcate the md5 hash, if it has not already been calculated. - if(!md5digest) { + if (!md5digest) { md5digest = Crypto.createHash('md5').update(chunk).digest() } @@ -178,12 +178,12 @@ export default class ObjectUploader extends Transform { } // Write the chunk with an uploader. - let query = querystring.stringify({ + const query = querystring.stringify({ partNumber: partNumber, uploadId: this.id }) - let options = { + const options = { method, query, headers, bucketName: this.bucketName, objectName: this.objectName @@ -209,9 +209,9 @@ export default class ObjectUploader extends Transform { _flush(callback) { if (this.emptyStream) { - let method = 'PUT' - let headers = Object.assign({}, this.metaData, {'Content-Length': 0}) - let options = { + const method = 'PUT' + const headers = Object.assign({}, this.metaData, {'Content-Length': 0}) + const options = { method, headers, query: '', bucketName: this.bucketName, @@ -221,7 +221,7 @@ export default class ObjectUploader extends Transform { this.client.makeRequest(options, '', [200], '', true, (err, response) => { if (err) return callback(err) - let result = { + const result = { etag: sanitizeETag(response.headers.etag), versionId: getVersionId(response.headers) } diff --git a/src/main/post-policy.ts b/src/main/post-policy.ts new file mode 100644 index 00000000..dd97c968 --- /dev/null +++ b/src/main/post-policy.ts @@ -0,0 +1,100 @@ +// Build PostPolicy object that can be signed by presignedPostPolicy +export class PostPolicy { + public policy: Record + public formData: Record + + constructor() { + this.policy = { + conditions: [] + } + this.formData = {} + } + + // set expiration date + setExpires(date: { toISOString: () => any }) { + if (!date) { + throw new errors.InvalidDateError('Invalid date : cannot be null') + } + this.policy.expiration = date.toISOString() + } + + // set object name + setKey(objectName: string) { + if (!isValidObjectName(objectName)) { + throw new errors.InvalidObjectNameError(`Invalid object name : ${objectName}`) + } + this.policy.conditions.push(['eq', '$key', objectName]) + this.formData.key = objectName + } + + // set object name prefix, i.e policy allows any keys with this prefix + setKeyStartsWith(prefix: string) { + if (!isValidPrefix(prefix)) { + throw new errors.InvalidPrefixError(`Invalid prefix : ${prefix}`) + } + this.policy.conditions.push(['starts-with', '$key', prefix]) + this.formData.key = prefix + } + + // set bucket name + setBucket(bucketName: string) { + if (!isValidBucketName(bucketName)) { + throw new errors.InvalidBucketNameError(`Invalid bucket name : ${bucketName}`) + } + this.policy.conditions.push(['eq', '$bucket', bucketName]) + this.formData.bucket = bucketName + } + + // set Content-Type + setContentType(type: any) { + if (!type) { + throw new Error('content-type cannot be null') + } + this.policy.conditions.push(['eq', '$Content-Type', type]) + this.formData['Content-Type'] = type + } + + // set Content-Type prefix, i.e image/ allows any image + setContentTypeStartsWith(prefix: any) { + if (!prefix) { + throw new Error('content-type cannot be null') + } + this.policy.conditions.push(['starts-with', '$Content-Type', prefix]) + this.formData['Content-Type'] = prefix + } + + // set Content-Disposition + setContentDisposition(value: any) { + if (!value) { + throw new Error('content-disposition cannot be null') + } + this.policy.conditions.push(['eq', '$Content-Disposition', value]) + this.formData['Content-Disposition'] = value + } + + // set minimum/maximum length of what Content-Length can be. + setContentLengthRange(min: number, max: number) { + if (min > max) { + throw new Error('min cannot be more than max') + } + if (min < 0) { + throw new Error('min should be > 0') + } + if (max < 0) { + throw new Error('max should be > 0') + } + this.policy.conditions.push(['content-length-range', min, max]) + } + + // set user defined metadata + setUserMetaData(metaData: { [s: string]: unknown } | ArrayLike) { + if (!isObject(metaData)) { + throw new TypeError('metadata should be of type "object"') + } + Object.entries(metaData).forEach(([key, value]) => { + const amzMetaDataKey = `x-amz-meta-${key}` + this.policy.conditions.push(['eq', `$${amzMetaDataKey}`, value]) + this.formData[amzMetaDataKey] = value + }) + } +} \ No newline at end of file diff --git a/src/main/s3-endpoints.js b/src/main/s3-endpoints.ts similarity index 87% rename from src/main/s3-endpoints.js rename to src/main/s3-endpoints.ts index ee5e773a..c2fd91e6 100644 --- a/src/main/s3-endpoints.js +++ b/src/main/s3-endpoints.ts @@ -17,7 +17,7 @@ import { isString } from './helpers.js' // List of currently supported endpoints. -let awsS3Endpoint = { +const awsS3Endpoint: Record = { 'us-east-1': 's3.amazonaws.com', 'us-east-2': 's3-us-east-2.amazonaws.com', 'us-west-1': 's3-us-west-1.amazonaws.com', @@ -37,12 +37,12 @@ let awsS3Endpoint = { } // getS3Endpoint get relevant endpoint for the region. -export function getS3Endpoint(region) { - if (!isString(region)) { +export function getS3Endpoint(region: string) { + if (!isString(region as never)) { throw new TypeError(`Invalid region: ${region}`) } - var endpoint = awsS3Endpoint[region] - if (endpoint) { + const endpoint: string | undefined = awsS3Endpoint[region] + if (endpoint !== undefined && endpoint !== '') { return endpoint } return 's3.amazonaws.com' diff --git a/src/main/signing.js b/src/main/signing.ts similarity index 93% rename from src/main/signing.js rename to src/main/signing.ts index ded424bc..f126ffec 100644 --- a/src/main/signing.js +++ b/src/main/signing.ts @@ -50,7 +50,7 @@ function getCanonicalRequest(method, path, headers, signedHeaders, hashedPayload } const headersArray = signedHeaders.reduce((acc, i) => { // Trim spaces from the value (required by V4 spec) - const val = `${headers[i]}`.replace(/ +/g, " ") + const val = `${headers[i]}`.replace(/ +/g, ' ') acc.push(`${i.toLowerCase()}:${val}`) return acc }, []) @@ -78,7 +78,7 @@ function getCanonicalRequest(method, path, headers, signedHeaders, hashedPayload } // generate a credential string -function getCredential(accessKey, region, requestDate,serviceName="s3") { +function getCredential(accessKey, region, requestDate, serviceName='s3') { if (!isString(accessKey)) { throw new TypeError('accessKey should be of type "string"') } @@ -88,7 +88,7 @@ function getCredential(accessKey, region, requestDate,serviceName="s3") { if (!isObject(requestDate)) { throw new TypeError('requestDate should be of type "object"') } - return `${accessKey}/${getScope(region, requestDate,serviceName)}` + return `${accessKey}/${getScope(region, requestDate, serviceName)}` } // Returns signed headers array - alphabetically sorted @@ -130,7 +130,7 @@ function getSignedHeaders(headers) { } // returns the key used for calculating signature -function getSigningKey(date, region, secretKey,serviceName="s3") { +function getSigningKey(date, region, secretKey, serviceName='s3') { if (!isObject(date)) { throw new TypeError('date should be of type "object"') } @@ -141,14 +141,14 @@ function getSigningKey(date, region, secretKey,serviceName="s3") { throw new TypeError('secretKey should be of type "string"') } const dateLine = makeDateShort(date) - let hmac1 = Crypto.createHmac('sha256', 'AWS4' + secretKey).update(dateLine).digest(), + const hmac1 = Crypto.createHmac('sha256', 'AWS4' + secretKey).update(dateLine).digest(), hmac2 = Crypto.createHmac('sha256', hmac1).update(region).digest(), hmac3 = Crypto.createHmac('sha256', hmac2).update(serviceName).digest() return Crypto.createHmac('sha256', hmac3).update('aws4_request').digest() } // returns the string that needs to be signed -function getStringToSign(canonicalRequest, requestDate, region,serviceName="s3") { +function getStringToSign(canonicalRequest, requestDate, region, serviceName='s3') { if (!isString(canonicalRequest)) { throw new TypeError('canonicalRequest should be of type "string"') } @@ -188,7 +188,7 @@ export function postPresignSignatureV4(region, date, secretKey, policyBase64) { } // Returns the authorization header -export function signV4(request, accessKey, secretKey, region, requestDate, serviceName="s3") { +export function signV4(request, accessKey, secretKey, region, requestDate, serviceName='s3') { if (!isObject(request)) { throw new TypeError('request should be of type "object"') } @@ -214,17 +214,17 @@ export function signV4(request, accessKey, secretKey, region, requestDate, servi const signedHeaders = getSignedHeaders(request.headers) const canonicalRequest = getCanonicalRequest(request.method, request.path, request.headers, signedHeaders, sha256sum) - const serviceIdentifier = serviceName || "s3" - const stringToSign = getStringToSign(canonicalRequest, requestDate, region,serviceIdentifier) - const signingKey = getSigningKey(requestDate, region, secretKey,serviceIdentifier) + const serviceIdentifier = serviceName || 's3' + const stringToSign = getStringToSign(canonicalRequest, requestDate, region, serviceIdentifier) + const signingKey = getSigningKey(requestDate, region, secretKey, serviceIdentifier) const credential = getCredential(accessKey, region, requestDate, serviceIdentifier) const signature = Crypto.createHmac('sha256', signingKey).update(stringToSign).digest('hex').toLowerCase() return `${signV4Algorithm} Credential=${credential}, SignedHeaders=${signedHeaders.join(';').toLowerCase()}, Signature=${signature}` } -export function signV4ByServiceName( request, accessKey, secretKey, region, requestDate, serviceName="s3") { - return signV4(request, accessKey, secretKey, region,requestDate, serviceName) +export function signV4ByServiceName( request, accessKey, secretKey, region, requestDate, serviceName='s3') { + return signV4(request, accessKey, secretKey, region, requestDate, serviceName) } // returns a presigned URL string export function presignSignatureV4(request, accessKey, secretKey, sessionToken, region, requestDate, expires) { diff --git a/src/main/transformers.js b/src/main/transformers.ts similarity index 89% rename from src/main/transformers.js rename to src/main/transformers.ts index 4cefe705..d155f5fa 100644 --- a/src/main/transformers.js +++ b/src/main/transformers.ts @@ -28,8 +28,8 @@ import * as errors from './errors.js' // parser function is passed upon reaching the 'end' of the stream, // `parser(concatenated_data)` will be emitted. export function getConcater(parser, emitError) { - var objectMode = false - var bufs = [] + let objectMode = false + const bufs = [] if (parser && !isFunction(parser)) { throw new TypeError('parser should be of type "function"') @@ -63,8 +63,8 @@ export function getConcater(parser, emitError) { // Generates an Error object depending on http statusCode and XML body export function getErrorTransformer(response) { - var statusCode = response.statusCode - var code, message + const statusCode = response.statusCode + let code, message if (statusCode === 301) { code = 'MovedPermanently' message = 'Moved Permanently' @@ -88,7 +88,7 @@ export function getErrorTransformer(response) { message = `${statusCode}` } - var headerInfo = {} + const headerInfo = {} // A value created by S3 compatible server that uniquely identifies // the request. headerInfo.amzRequestid = response.headersSent ? response.getHeader('x-amz-request-id') : null @@ -99,9 +99,9 @@ export function getErrorTransformer(response) { headerInfo.amzBucketRegion = response.headersSent ? response.getHeader('x-amz-bucket-region') : null return getConcater(xmlString => { - let getError = () => { + const getError = () => { // Message should be instantiated for each S3Errors. - var e = new errors.S3Error(message) + const e = new errors.S3Error(message) // S3 Error code. e.code = code _.each(headerInfo, (value, key) => { @@ -124,8 +124,8 @@ export function getErrorTransformer(response) { // A through stream that calculates md5sum and sha256sum export function getHashSummer(enableSHA256) { - var md5 = Crypto.createHash('md5') - var sha256 = Crypto.createHash('sha256') + const md5 = Crypto.createHash('md5') + const sha256 = Crypto.createHash('sha256') return Through2.obj(function(chunk, enc, cb) { @@ -136,14 +136,14 @@ export function getHashSummer(enableSHA256) { } cb() }, function(cb) { - var md5sum = '' - var sha256sum = '' + let md5sum = '' + let sha256sum = '' if (enableSHA256) { sha256sum = sha256.digest('hex') } else { md5sum = md5.digest('base64') } - var hashData = {md5sum, sha256sum} + const hashData = {md5sum, sha256sum} this.push(hashData) this.push(null) cb() @@ -214,7 +214,7 @@ export function getNotificationTransformer() { return new JSONParser() } -export function bucketVersioningTransformer(){ +export function bucketVersioningTransformer() { return getConcater(xmlParsers.parseBucketVersioningConfig) } @@ -222,33 +222,33 @@ export function getTagsTransformer() { return getConcater( xmlParsers.parseTagging) } -export function lifecycleTransformer(){ +export function lifecycleTransformer() { return getConcater(xmlParsers.parseLifecycleConfig) } -export function objectLockTransformer(){ +export function objectLockTransformer() { return getConcater(xmlParsers.parseObjectLockConfig) } -export function objectRetentionTransformer(){ +export function objectRetentionTransformer() { return getConcater(xmlParsers.parseObjectRetentionConfig) } -export function bucketEncryptionTransformer(){ +export function bucketEncryptionTransformer() { return getConcater(xmlParsers.parseBucketEncryptionConfig) } -export function replicationConfigTransformer(){ +export function replicationConfigTransformer() { return getConcater(xmlParsers.parseReplicationConfig) } -export function objectLegalHoldTransformer(){ +export function objectLegalHoldTransformer() { return getConcater(xmlParsers.parseObjectLegalHoldConfig) } -export function uploadPartTransformer(){ +export function uploadPartTransformer() { return getConcater(xmlParsers.uploadPartParser) } -export function selectObjectContentTransformer(){ - return getConcater() +export function selectObjectContentTransformer() { + return getConcater() } \ No newline at end of file diff --git a/src/main/transport.ts b/src/main/transport.ts new file mode 100644 index 00000000..09ac4565 --- /dev/null +++ b/src/main/transport.ts @@ -0,0 +1,6 @@ +import Http from 'http' +import Https from 'https' + +export interface Transport { + request(options: string | URL | Http.RequestOptions | Https.RequestOptions, callback?: (res: Http.IncomingMessage) => void): Http.ClientRequest +} \ No newline at end of file diff --git a/src/main/types/bucket-options.ts b/src/main/types/bucket-options.ts new file mode 100644 index 00000000..22dae1fe --- /dev/null +++ b/src/main/types/bucket-options.ts @@ -0,0 +1,3 @@ +export type MakeBucketOptions = { + ObjectLocking: boolean +} \ No newline at end of file diff --git a/src/main/types/copy-object-options.ts b/src/main/types/copy-object-options.ts new file mode 100644 index 00000000..8b4f31ee --- /dev/null +++ b/src/main/types/copy-object-options.ts @@ -0,0 +1,4 @@ +export type CopyObjectV1Response = { + etag: string, + lastModified: Date +} \ No newline at end of file diff --git a/src/main/types/get-object-options.ts b/src/main/types/get-object-options.ts new file mode 100644 index 00000000..17b19029 --- /dev/null +++ b/src/main/types/get-object-options.ts @@ -0,0 +1,3 @@ +export type GetObjectOptions = { + version?: string; +} \ No newline at end of file diff --git a/src/main/types/list-query-options.ts b/src/main/types/list-query-options.ts new file mode 100644 index 00000000..3011490f --- /dev/null +++ b/src/main/types/list-query-options.ts @@ -0,0 +1,5 @@ +export type ListQueryOptions = { + Delimiter: string, + MaxKeys: number, + IncludeVersion: boolean +} \ No newline at end of file diff --git a/src/main/types/request-options.ts b/src/main/types/request-options.ts new file mode 100644 index 00000000..99641094 --- /dev/null +++ b/src/main/types/request-options.ts @@ -0,0 +1,11 @@ +import { type OutgoingHttpHeaders} from 'http' + +export type MakeRequestOptions = { + headers?: OutgoingHttpHeaders, + method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD', + region?: string, + bucketName?: string, + objectName?: string, + query?: string, + pathStyle?: boolean +} \ No newline at end of file diff --git a/src/main/xml-parsers.js b/src/main/xml-parsers.ts similarity index 76% rename from src/main/xml-parsers.js rename to src/main/xml-parsers.ts index ef01a7ec..a7abe43c 100644 --- a/src/main/xml-parsers.js +++ b/src/main/xml-parsers.ts @@ -26,21 +26,21 @@ import { parseXml, readableStream, SelectResults -} from "./helpers" -var crc32 = require("buffer-crc32") +} from './helpers' +import crc32 from './internals/buffer-crc32' // Parse XML and return information as Javascript types // parse error XML response export function parseError(xml, headerInfo) { - var xmlErr = {} - var xmlObj = fxp.parse(xml) + let xmlErr = {} + const xmlObj = fxp.parse(xml) if (xmlObj.Error) { - xmlErr = xmlObj.Error + xmlErr = xmlObj.Error } - var e = new errors.S3Error() + const e = new errors.S3Error() _.each(xmlErr, (value, key) => { e[key.toLowerCase()] = value }) @@ -53,12 +53,12 @@ export function parseError(xml, headerInfo) { // parse XML response for copy object export function parseCopyObject(xml) { - var result = { - etag: "", - lastModified: "" + const result = { + etag: '', + lastModified: '' } - var xmlobj = parseXml(xml) + let xmlobj = parseXml(xml) if (!xmlobj.CopyObjectResult) { throw new errors.InvalidXMLError('Missing tag: "CopyObjectResult"') } @@ -73,20 +73,20 @@ export function parseCopyObject(xml) { // parse XML response for listing in-progress multipart uploads export function parseListMultipart(xml) { - var result = { + const result = { uploads: [], prefixes: [], isTruncated: false } - var xmlobj = parseXml(xml) + let xmlobj = parseXml(xml) if (!xmlobj.ListMultipartUploadsResult) { throw new errors.InvalidXMLError('Missing tag: "ListMultipartUploadsResult"') } xmlobj = xmlobj.ListMultipartUploadsResult if (xmlobj.IsTruncated) result.isTruncated = xmlobj.IsTruncated - if (xmlobj.NextKeyMarker) result.nextKeyMarker = xmlobj.NextKeyMarker + if (xmlobj.NextKeyMarker) result.nextKeyMarker = xmlobj.NextKeyMarker if (xmlobj.NextUploadIdMarker) result.nextUploadIdMarker = xmlobj.nextUploadIdMarker if (xmlobj.CommonPrefixes) { @@ -97,12 +97,12 @@ export function parseListMultipart(xml) { if (xmlobj.Upload) { toArray(xmlobj.Upload).forEach(upload => { - var key = upload.Key - var uploadId = upload.UploadId - var initiator = {id: upload.Initiator.ID, displayName: upload.Initiator.DisplayName} - var owner = {id: upload.Owner.ID, displayName: upload.Owner.DisplayName} - var storageClass = upload.StorageClass - var initiated = new Date(upload.Initiated) + const key = upload.Key + const uploadId = upload.UploadId + const initiator = {id: upload.Initiator.ID, displayName: upload.Initiator.DisplayName} + const owner = {id: upload.Owner.ID, displayName: upload.Owner.DisplayName} + const storageClass = upload.StorageClass + const initiated = new Date(upload.Initiated) result.uploads.push({key, uploadId, initiator, owner, storageClass, initiated}) }) } @@ -111,8 +111,8 @@ export function parseListMultipart(xml) { // parse XML response to list all the owned buckets export function parseListBucket(xml) { - var result = [] - var xmlobj = parseXml(xml) + const result = [] + let xmlobj = parseXml(xml) if (!xmlobj.ListAllMyBucketsResult) { throw new errors.InvalidXMLError('Missing tag: "ListAllMyBucketsResult"') @@ -122,8 +122,8 @@ export function parseListBucket(xml) { if (xmlobj.Buckets) { if (xmlobj.Buckets.Bucket) { toArray(xmlobj.Buckets.Bucket).forEach(bucket => { - var name = bucket.Name - var creationDate = new Date(bucket.CreationDate) + const name = bucket.Name + const creationDate = new Date(bucket.CreationDate) result.push({name, creationDate}) }) } @@ -133,14 +133,14 @@ export function parseListBucket(xml) { // parse XML response for bucket notification export function parseBucketNotification(xml) { - var result = { + const result = { TopicConfiguration : [], QueueConfiguration : [], - CloudFunctionConfiguration : [], + CloudFunctionConfiguration : [] } // Parse the events list - var genEvents = function(events) { - var result = [] + const genEvents = function(events) { + const result = [] if (events) { toArray(events).forEach(s3event => { result.push(s3event) @@ -149,16 +149,16 @@ export function parseBucketNotification(xml) { return result } // Parse all filter rules - var genFilterRules = function(filters) { - var result = [] + const genFilterRules = function(filters) { + const result = [] if (filters) { filters = toArray(filters) if (filters[0].S3Key) { filters[0].S3Key = toArray(filters[0].S3Key) if (filters[0].S3Key[0].FilterRule) { toArray(filters[0].S3Key[0].FilterRule).forEach(rule => { - var Name = toArray(rule.Name)[0] - var Value = toArray(rule.Value)[0] + const Name = toArray(rule.Name)[0] + const Value = toArray(rule.Value)[0] result.push({Name, Value}) }) } @@ -167,36 +167,36 @@ export function parseBucketNotification(xml) { return result } - var xmlobj = parseXml(xml) + let xmlobj = parseXml(xml) xmlobj = xmlobj.NotificationConfiguration // Parse all topic configurations in the xml if (xmlobj.TopicConfiguration) { toArray(xmlobj.TopicConfiguration).forEach(config => { - var Id = toArray(config.Id)[0] - var Topic = toArray(config.Topic)[0] - var Event = genEvents(config.Event) - var Filter = genFilterRules(config.Filter) + const Id = toArray(config.Id)[0] + const Topic = toArray(config.Topic)[0] + const Event = genEvents(config.Event) + const Filter = genFilterRules(config.Filter) result.TopicConfiguration.push({ Id, Topic, Event, Filter}) }) } // Parse all topic configurations in the xml if (xmlobj.QueueConfiguration) { toArray(xmlobj.QueueConfiguration).forEach(config => { - var Id = toArray(config.Id)[0] - var Queue = toArray(config.Queue)[0] - var Event = genEvents(config.Event) - var Filter = genFilterRules(config.Filter) + const Id = toArray(config.Id)[0] + const Queue = toArray(config.Queue)[0] + const Event = genEvents(config.Event) + const Filter = genFilterRules(config.Filter) result.QueueConfiguration.push({ Id, Queue, Event, Filter}) }) } // Parse all QueueConfiguration arrays if (xmlobj.CloudFunctionConfiguration) { toArray(xmlobj.CloudFunctionConfiguration).forEach(config => { - var Id = toArray(config.Id)[0] - var CloudFunction = toArray(config.CloudFunction)[0] - var Event = genEvents(config.Event) - var Filter = genFilterRules(config.Filter) + const Id = toArray(config.Id)[0] + const CloudFunction = toArray(config.CloudFunction)[0] + const Event = genEvents(config.Event) + const Filter = genFilterRules(config.Filter) result.CloudFunctionConfiguration.push({ Id, CloudFunction, Event, Filter}) }) } @@ -212,8 +212,8 @@ export function parseBucketRegion(xml) { // parse XML response for list parts of an in progress multipart upload export function parseListParts(xml) { - var xmlobj = parseXml(xml) - var result = { + let xmlobj = parseXml(xml) + const result = { isTruncated: false, parts: [], marker: undefined @@ -226,9 +226,9 @@ export function parseListParts(xml) { if (xmlobj.NextPartNumberMarker) result.marker = +toArray(xmlobj.NextPartNumberMarker)[0] if (xmlobj.Part) { toArray(xmlobj.Part).forEach(p => { - var part = + toArray(p.PartNumber)[0] - var lastModified = new Date(p.LastModified) - var etag = p.ETag.replace(/^"/g, '').replace(/"$/g, '') + const part = + toArray(p.PartNumber)[0] + const lastModified = new Date(p.LastModified) + const etag = p.ETag.replace(/^"/g, '').replace(/"$/g, '') .replace(/^"/g, '').replace(/"$/g, '') .replace(/^"/g, '').replace(/"$/g, '') result.parts.push({part, lastModified, etag}) @@ -239,7 +239,7 @@ export function parseListParts(xml) { // parse XML response when a new multipart upload is initiated export function parseInitiateMultipart(xml) { - var xmlobj = parseXml(xml) + let xmlobj = parseXml(xml) if (!xmlobj.InitiateMultipartUploadResult) { throw new errors.InvalidXMLError('Missing tag: "InitiateMultipartUploadResult"') @@ -252,12 +252,12 @@ export function parseInitiateMultipart(xml) { // parse XML response when a multipart upload is completed export function parseCompleteMultipart(xml) { - var xmlobj = parseXml(xml).CompleteMultipartUploadResult + const xmlobj = parseXml(xml).CompleteMultipartUploadResult if (xmlobj.Location) { - var location = toArray(xmlobj.Location)[0] - var bucket = toArray(xmlobj.Bucket)[0] - var key = xmlobj.Key - var etag = xmlobj.ETag.replace(/^"/g, '').replace(/"$/g, '') + const location = toArray(xmlobj.Location)[0] + const bucket = toArray(xmlobj.Bucket)[0] + const key = xmlobj.Key + const etag = xmlobj.ETag.replace(/^"/g, '').replace(/"$/g, '') .replace(/^"/g, '').replace(/"$/g, '') .replace(/^"/g, '').replace(/"$/g, '') @@ -265,15 +265,15 @@ export function parseCompleteMultipart(xml) { } // Complete Multipart can return XML Error after a 200 OK response if (xmlobj.Code && xmlobj.Message) { - var errCode = toArray(xmlobj.Code)[0] - var errMessage = toArray(xmlobj.Message)[0] + const errCode = toArray(xmlobj.Code)[0] + const errMessage = toArray(xmlobj.Message)[0] return {errCode, errMessage} } } const formatObjInfo = (content, opts={}) => { - let { + const { Key, LastModified, ETag, @@ -282,7 +282,7 @@ const formatObjInfo = (content, opts={}) => { IsLatest } = content - if(!isObject(opts)){ + if (!isObject(opts)) { opts = {} } @@ -303,7 +303,7 @@ const formatObjInfo = (content, opts={}) => { // parse XML response for list objects in a bucket export function parseListObjects(xml) { - var result = { + const result = { objects: [], isTruncated: false } @@ -312,7 +312,7 @@ export function parseListObjects(xml) { const xmlobj = parseXml(xml) const parseCommonPrefixesEntity = responseEntity => { - if(responseEntity){ + if (responseEntity) { toArray(responseEntity).forEach((commonPrefix) => { result.objects.push({prefix: sanitizeObjectKey(toArray(commonPrefix.Prefix)[0]), size: 0}) }) @@ -322,7 +322,7 @@ export function parseListObjects(xml) { const listBucketResult = xmlobj.ListBucketResult const listVersionsResult=xmlobj.ListVersionsResult - if(listBucketResult){ + if (listBucketResult) { if ( listBucketResult.IsTruncated) { isTruncated = listBucketResult.IsTruncated } @@ -336,14 +336,14 @@ export function parseListObjects(xml) { }) } - if( listBucketResult.NextMarker){ + if ( listBucketResult.NextMarker) { nextMarker = listBucketResult.NextMarker } parseCommonPrefixesEntity(listBucketResult.CommonPrefixes) } - if(listVersionsResult){ - if(listVersionsResult.IsTruncated){ + if (listVersionsResult) { + if (listVersionsResult.IsTruncated) { isTruncated = listVersionsResult.IsTruncated } @@ -376,11 +376,11 @@ export function parseListObjects(xml) { // parse XML response for list objects v2 in a bucket export function parseListObjectsV2(xml) { - var result = { + const result = { objects: [], isTruncated: false } - var xmlobj = parseXml(xml) + let xmlobj = parseXml(xml) if (!xmlobj.ListBucketResult) { throw new errors.InvalidXMLError('Missing tag: "ListBucketResult"') } @@ -389,10 +389,10 @@ export function parseListObjectsV2(xml) { if (xmlobj.NextContinuationToken) result.nextContinuationToken = xmlobj.NextContinuationToken if (xmlobj.Contents) { toArray(xmlobj.Contents).forEach(content => { - var name = sanitizeObjectKey(toArray(content.Key)[0]) - var lastModified = new Date(content.LastModified) - var etag = sanitizeETag(content.ETag) - var size = content.Size + const name = sanitizeObjectKey(toArray(content.Key)[0]) + const lastModified = new Date(content.LastModified) + const etag = sanitizeETag(content.ETag) + const size = content.Size result.objects.push({name, lastModified, etag, size}) }) } @@ -406,11 +406,11 @@ export function parseListObjectsV2(xml) { // parse XML response for list objects v2 with metadata in a bucket export function parseListObjectsV2WithMetadata(xml) { - var result = { + const result = { objects: [], isTruncated: false } - var xmlobj = parseXml(xml) + let xmlobj = parseXml(xml) if (!xmlobj.ListBucketResult) { throw new errors.InvalidXMLError('Missing tag: "ListBucketResult"') } @@ -420,11 +420,11 @@ export function parseListObjectsV2WithMetadata(xml) { if (xmlobj.Contents) { toArray(xmlobj.Contents).forEach(content => { - var name = sanitizeObjectKey(content.Key) - var lastModified = new Date(content.LastModified) - var etag = sanitizeETag(content.ETag) - var size = content.Size - var metadata + const name = sanitizeObjectKey(content.Key) + const lastModified = new Date(content.LastModified) + const etag = sanitizeETag(content.ETag) + const size = content.Size + let metadata if (content.UserMetadata != null) { metadata = toArray(content.UserMetadata)[0] } else { @@ -442,45 +442,45 @@ export function parseListObjectsV2WithMetadata(xml) { return result } -export function parseBucketVersioningConfig(xml){ - var xmlObj = parseXml(xml) +export function parseBucketVersioningConfig(xml) { + const xmlObj = parseXml(xml) return xmlObj.VersioningConfiguration } -export function parseTagging(xml){ +export function parseTagging(xml) { const xmlObj = parseXml(xml) let result =[] - if(xmlObj.Tagging && xmlObj.Tagging.TagSet&& xmlObj.Tagging.TagSet.Tag){ + if (xmlObj.Tagging && xmlObj.Tagging.TagSet&& xmlObj.Tagging.TagSet.Tag) { const tagResult = xmlObj.Tagging.TagSet.Tag // if it is a single tag convert into an array so that the return value is always an array. - if(isObject(tagResult)){ + if (isObject(tagResult)) { result.push(tagResult) - }else{ + } else { result = tagResult } } return result } -export function parseLifecycleConfig(xml){ +export function parseLifecycleConfig(xml) { const xmlObj = parseXml(xml) return xmlObj.LifecycleConfiguration } -export function parseObjectLockConfig(xml){ +export function parseObjectLockConfig(xml) { const xmlObj = parseXml(xml) let lockConfigResult={} - if(xmlObj.ObjectLockConfiguration) { + if (xmlObj.ObjectLockConfiguration) { lockConfigResult = { objectLockEnabled: xmlObj.ObjectLockConfiguration.ObjectLockEnabled } let retentionResp - if(xmlObj.ObjectLockConfiguration && xmlObj.ObjectLockConfiguration.Rule && xmlObj.ObjectLockConfiguration.Rule.DefaultRetention){ + if (xmlObj.ObjectLockConfiguration && xmlObj.ObjectLockConfiguration.Rule && xmlObj.ObjectLockConfiguration.Rule.DefaultRetention) { retentionResp = xmlObj.ObjectLockConfiguration.Rule.DefaultRetention || {} lockConfigResult.mode= retentionResp.Mode } - if(retentionResp) { + if (retentionResp) { const isUnitYears = retentionResp.Years if (isUnitYears) { lockConfigResult.validity = isUnitYears @@ -495,7 +495,7 @@ export function parseObjectLockConfig(xml){ } -export function parseObjectRetentionConfig(xml){ +export function parseObjectRetentionConfig(xml) { const xmlObj = parseXml(xml) const retentionConfig = xmlObj.Retention @@ -505,11 +505,11 @@ export function parseObjectRetentionConfig(xml){ } } -export function parseBucketEncryptionConfig(xml){ - let encConfig = parseXml(xml) +export function parseBucketEncryptionConfig(xml) { + const encConfig = parseXml(xml) return encConfig } -export function parseReplicationConfig(xml){ +export function parseReplicationConfig(xml) { const xmlObj = parseXml(xml) const replicationConfig = { ReplicationConfiguration: { @@ -520,29 +520,29 @@ export function parseReplicationConfig(xml){ return replicationConfig } -export function parseObjectLegalHoldConfig(xml){ +export function parseObjectLegalHoldConfig(xml) { const xmlObj = parseXml(xml) return xmlObj.LegalHold } -export function uploadPartParser (xml){ +export function uploadPartParser (xml) { const xmlObj = parseXml(xml) const respEl = xmlObj.CopyPartResult return respEl } -export function parseSelectObjectContentResponse(res){ +export function parseSelectObjectContentResponse(res) { // extractHeaderType extracts the first half of the header message, the header type. function extractHeaderType(stream) { - const headerNameLen = Buffer.from(stream.read(1)).readUInt8() + const headerNameLen = Buffer.from(stream.read(1)).readUInt8() const headerNameWithSeparator = Buffer.from(stream.read(headerNameLen)).toString() - const splitBySeparator = (headerNameWithSeparator|| "").split(":") - const headerName = splitBySeparator.length >= 1 ? splitBySeparator[1] : "" + const splitBySeparator = (headerNameWithSeparator|| '').split(':') + const headerName = splitBySeparator.length >= 1 ? splitBySeparator[1] : '' return headerName } - function extractHeaderValue(stream){ + function extractHeaderValue(stream) { const bodyLen= Buffer.from(stream.read(2)).readUInt16BE() const bodyName= Buffer.from(stream.read(bodyLen)).toString() return bodyName @@ -552,25 +552,25 @@ export function parseSelectObjectContentResponse(res){ const selectResults = new SelectResults({})// will be returned const responseStream = readableStream(res) // convert byte array to a readable responseStream - while( responseStream._readableState.length ) { // Top level responseStream read tracker. + while ( responseStream._readableState.length ) { // Top level responseStream read tracker. let msgCrcAccumulator // accumulate from start of the message till the message crc start. const totalByteLengthBuffer = Buffer.from(responseStream.read(4)) msgCrcAccumulator = crc32(totalByteLengthBuffer) const headerBytesBuffer = Buffer.from(responseStream.read(4)) - msgCrcAccumulator = crc32(headerBytesBuffer,msgCrcAccumulator) + msgCrcAccumulator = crc32(headerBytesBuffer, msgCrcAccumulator) const calculatedPreludeCrc = msgCrcAccumulator.readInt32BE() // use it to check if any CRC mismatch in header itself. const preludeCrcBuffer = Buffer.from(responseStream.read(4))// read 4 bytes i.e 4+4 =8 + 4 = 12 ( prelude + prelude crc) - msgCrcAccumulator = crc32(preludeCrcBuffer,msgCrcAccumulator) + msgCrcAccumulator = crc32(preludeCrcBuffer, msgCrcAccumulator) const totalMsgLength=totalByteLengthBuffer.readInt32BE() const headerLength=headerBytesBuffer.readInt32BE() const preludeCrcByteValue = preludeCrcBuffer.readInt32BE() - if(preludeCrcByteValue !== calculatedPreludeCrc){ + if (preludeCrcByteValue !== calculatedPreludeCrc) { // Handle Header CRC mismatch Error throw new Error(`Header Checksum Mismatch, Prelude CRC of ${preludeCrcByteValue} does not equal expected CRC of ${calculatedPreludeCrc}`) } @@ -578,12 +578,12 @@ export function parseSelectObjectContentResponse(res){ const headers = {} if (headerLength > 0) { const headerBytes = Buffer.from(responseStream.read(headerLength)) - msgCrcAccumulator = crc32(headerBytes,msgCrcAccumulator) + msgCrcAccumulator = crc32(headerBytes, msgCrcAccumulator) const headerReaderStream = readableStream(headerBytes) while ( headerReaderStream._readableState.length ) { - let headerTypeName = extractHeaderType(headerReaderStream) + const headerTypeName = extractHeaderType(headerReaderStream) headerReaderStream.read(1) // just read and ignore it. headers[headerTypeName] = extractHeaderValue(headerReaderStream) } @@ -591,45 +591,45 @@ export function parseSelectObjectContentResponse(res){ let payloadStream const payLoadLength = totalMsgLength - headerLength - 16 - if(payLoadLength > 0) { + if (payLoadLength > 0) { const payLoadBuffer = Buffer.from(responseStream.read(payLoadLength)) msgCrcAccumulator = crc32(payLoadBuffer, msgCrcAccumulator) // read the checksum early and detect any mismatch so we can avoid unnecessary further processing. const messageCrcByteValue = Buffer.from(responseStream.read(4)).readInt32BE() const calculatedCrc = msgCrcAccumulator.readInt32BE() // Handle message CRC Error - if(messageCrcByteValue !== calculatedCrc){ + if (messageCrcByteValue !== calculatedCrc) { throw new Error(`Message Checksum Mismatch, Message CRC of ${messageCrcByteValue} does not equal expected CRC of ${calculatedCrc}`) } payloadStream = readableStream(payLoadBuffer) } - const messageType = headers["message-type"] + const messageType = headers['message-type'] switch (messageType) { - case "error": { - const errorMessage = headers["error-code"] + ":\"" + headers["error-message"] + "\"" + case 'error': { + const errorMessage = headers['error-code'] + ':"' + headers['error-message'] + '"' throw new Error(errorMessage) } - case "event": { - const contentType = headers["content-type"] - const eventType = headers["event-type"] + case 'event': { + const contentType = headers['content-type'] + const eventType = headers['event-type'] switch (eventType) { - case "End": { + case 'End': { selectResults.setResponse(res) return selectResults } - case "Records": { + case 'Records': { const readData = payloadStream.read(payLoadLength) selectResults.setRecords(readData) break } - case "Progress": { + case 'Progress': { switch (contentType) { - case "text/xml": { + case 'text/xml': { const progressData = payloadStream.read(payLoadLength) selectResults.setProgress(progressData.toString()) break @@ -641,9 +641,9 @@ export function parseSelectObjectContentResponse(res){ } } break - case "Stats": { + case 'Stats': { switch (contentType) { - case "text/xml": { + case 'text/xml': { const statsData = payloadStream.read(payLoadLength) selectResults.setStats(statsData.toString()) break diff --git a/src/test/functional/functional-tests.js b/src/test/functional/functional-tests.js index 03c4eb07..aa6d3093 100644 --- a/src/test/functional/functional-tests.js +++ b/src/test/functional/functional-tests.js @@ -26,20 +26,20 @@ const url = require('url') const chai = require('chai') const assert = chai.assert const superagent = require('superagent') -const uuid = require("uuid") +const uuid = require('uuid') const splitFile = require('split-file') -const step = require("mocha-steps").step +const step = require('mocha-steps').step let helpers try { - helpers = require("../../../dist/main/helpers") + helpers = require('../../../dist/main/helpers') } catch (err) { helpers = require('minio/dist/main/helpers') } let AssumeRoleProvider try { - AssumeRoleProvider = require("../../../dist/main/AssumeRoleProvider") + AssumeRoleProvider = require('../../../dist/main/AssumeRoleProvider') } catch (err) { AssumeRoleProvider = require('minio/dist/main/AssumeRoleProvider') } @@ -60,41 +60,40 @@ const { DEFAULT_REGION } = helpers -require('source-map-support').install() -const isWindowsPlatform = process.platform === "win32" +const isWindowsPlatform = process.platform === 'win32' describe('functional tests', function () { this.timeout(30 * 60 * 1000) - var clientConfigParams = {} - var region_conf_env=process.env['MINIO_REGION'] + const clientConfigParams = {} + const region_conf_env=process.env['MINIO_REGION'] if (process.env['SERVER_ENDPOINT']) { - var res = process.env['SERVER_ENDPOINT'].split(":") + const res = process.env['SERVER_ENDPOINT'].split(':') clientConfigParams.endPoint = res[0] clientConfigParams.port = parseInt(res[1]) - var access_Key_env= process.env['ACCESS_KEY'] - var secret_key_env=process.env['SECRET_KEY'] + const access_Key_env= process.env['ACCESS_KEY'] + const secret_key_env=process.env['SECRET_KEY'] // If the user provides ENABLE_HTTPS, 1 = secure, anything else = unsecure. // Otherwise default useSSL as true. - var enable_https_env = process.env['ENABLE_HTTPS'] + const enable_https_env = process.env['ENABLE_HTTPS'] // Get the credentials from env vars, error out if they don't exist if (access_Key_env) { clientConfigParams.accessKey = access_Key_env } else { // eslint-disable-next-line no-console - console.error(`Error: ACCESS_KEY Environment variable is not set`) + console.error('Error: ACCESS_KEY Environment variable is not set') process.exit(1) } if (secret_key_env) { clientConfigParams.secretKey = secret_key_env } else { // eslint-disable-next-line no-console - console.error(`Error: SECRET_KEY Environment variable is not set`) + console.error('Error: SECRET_KEY Environment variable is not set') process.exit(1) } - clientConfigParams.useSSL = (enable_https_env == '1') + clientConfigParams.useSSL = enable_https_env == '1' } else { // If credentials aren't given, default to play.min.io. @@ -114,18 +113,18 @@ describe('functional tests', function () { // dataDir is falsy if we need to generate data on the fly. Otherwise, it will be // a directory with files to read from, i.e. /mint/data. - var dataDir = process.env['MINT_DATA_DIR'] + const dataDir = process.env['MINT_DATA_DIR'] - var client = new minio.Client(clientConfigParams) - var usEastConfig = clientConfigParams + const client = new minio.Client(clientConfigParams) + const usEastConfig = clientConfigParams usEastConfig.region = server_region - var clientUsEastRegion = new minio.Client(usEastConfig) + const clientUsEastRegion = new minio.Client(usEastConfig) - var traceStream + let traceStream // FUNCTIONAL_TEST_TRACE env variable contains the path to which trace // will be logged. Set it to /dev/stdout log to the stdout. - var trace_func_test_file_path = process.env['FUNCTIONAL_TEST_TRACE'] + const trace_func_test_file_path = process.env['FUNCTIONAL_TEST_TRACE'] if (trace_func_test_file_path) { // This is necessary for windows. if (trace_func_test_file_path === 'process.stdout') { @@ -137,44 +136,44 @@ describe('functional tests', function () { client.traceOn(traceStream) } - var bucketName = "minio-js-test-" + uuid.v4() - var objectName = uuid.v4() + const bucketName = 'minio-js-test-' + uuid.v4() + const objectName = uuid.v4() - var _1byteObjectName = 'datafile-1-b' - var _1byte = dataDir ? fs.readFileSync(dataDir + '/' + _1byteObjectName) : Buffer.alloc(1, 0) + const _1byteObjectName = 'datafile-1-b' + const _1byte = dataDir ? fs.readFileSync(dataDir + '/' + _1byteObjectName) : Buffer.alloc(1, 0) - var _100kbObjectName = 'datafile-100-kB' - var _100kb = dataDir ? fs.readFileSync(dataDir + '/' + _100kbObjectName) : Buffer.alloc(100 * 1024, 0) - var _100kbObjectNameCopy = _100kbObjectName + '-copy' + const _100kbObjectName = 'datafile-100-kB' + const _100kb = dataDir ? fs.readFileSync(dataDir + '/' + _100kbObjectName) : Buffer.alloc(100 * 1024, 0) + const _100kbObjectNameCopy = _100kbObjectName + '-copy' - var _100kbObjectBufferName = `${_100kbObjectName}.buffer` - var _MultiPath100kbObjectBufferName = `path/to/${_100kbObjectName}.buffer` - var _100kbmd5 = crypto.createHash('md5').update(_100kb).digest('hex') - var _100kb1kboffsetmd5 = crypto.createHash('md5').update(_100kb.slice(1024)).digest('hex') + const _100kbObjectBufferName = `${_100kbObjectName}.buffer` + const _MultiPath100kbObjectBufferName = `path/to/${_100kbObjectName}.buffer` + const _100kbmd5 = crypto.createHash('md5').update(_100kb).digest('hex') + const _100kb1kboffsetmd5 = crypto.createHash('md5').update(_100kb.slice(1024)).digest('hex') - var _65mbObjectName = 'datafile-65-MB' - var _65mb = dataDir ? fs.readFileSync(dataDir + '/' + _65mbObjectName) : Buffer.alloc(65 * 1024 * 1024, 0) - var _65mbmd5 = crypto.createHash('md5').update(_65mb).digest('hex') - var _65mbObjectNameCopy = _65mbObjectName + '-copy' + const _65mbObjectName = 'datafile-65-MB' + const _65mb = dataDir ? fs.readFileSync(dataDir + '/' + _65mbObjectName) : Buffer.alloc(65 * 1024 * 1024, 0) + const _65mbmd5 = crypto.createHash('md5').update(_65mb).digest('hex') + const _65mbObjectNameCopy = _65mbObjectName + '-copy' - var _5mbObjectName = 'datafile-5-MB' - var _5mb = dataDir ? fs.readFileSync(dataDir + '/' + _5mbObjectName) : Buffer.alloc(5 * 1024 * 1024, 0) - var _5mbmd5 = crypto.createHash('md5').update(_5mb).digest('hex') + const _5mbObjectName = 'datafile-5-MB' + const _5mb = dataDir ? fs.readFileSync(dataDir + '/' + _5mbObjectName) : Buffer.alloc(5 * 1024 * 1024, 0) + const _5mbmd5 = crypto.createHash('md5').update(_5mb).digest('hex') // create new http agent to check requests release sockets - var httpAgent = (clientConfigParams.useSSL ? https : http).Agent({keepAlive: true}) + const httpAgent = (clientConfigParams.useSSL ? https : http).Agent({keepAlive: true}) client.setRequestOptions({agent: httpAgent}) - var metaData = { + const metaData = { 'Content-Type': 'text/html', 'Content-Language': 'en', 'X-Amz-Meta-Testing': 1234, 'randomstuff': 5678 } - var tmpDir = os.tmpdir() + const tmpDir = os.tmpdir() function readableStream(data) { - var s = new stream.Readable() + const s = new stream.Readable() s._read = () => {} s.push(data) s.push(null) @@ -231,19 +230,19 @@ describe('functional tests', function () { } }) step(`makeBucket(bucketName, region, cb)_bucketName:${bucketName}-region, region:us-east-1_`, done => { - if(!isDifferentServerRegion) { + if (!isDifferentServerRegion) { clientUsEastRegion.makeBucket(`${bucketName}-region`, 'us-east-1', done) } done() }) step(`removeBucket(bucketName, cb)_bucketName:${bucketName}-region_`, done => { - if(!isDifferentServerRegion) { + if (!isDifferentServerRegion) { clientUsEastRegion.removeBucket(`${bucketName}-region`, done) } done() }) step(`makeBucket(bucketName, region)_bucketName:${bucketName}-region, region:us-east-1_`, done => { - if(!isDifferentServerRegion) { + if (!isDifferentServerRegion) { clientUsEastRegion.makeBucket(`${bucketName}-region`, 'us-east-1', (e) => { if (e) { // Some object storage servers like Azure, might not delete a bucket rightaway @@ -257,7 +256,7 @@ describe('functional tests', function () { done() }) step(`removeBucket(bucketName)_bucketName:${bucketName}-region_`, done => { - if(!isDifferentServerRegion) { + if (!isDifferentServerRegion) { clientUsEastRegion.removeBucket(`${bucketName}-region`) .then(() => done()) .catch(done) @@ -304,7 +303,7 @@ describe('functional tests', function () { }) step(`getObject(bucketName, objectName, callback)_bucketName:${bucketName}, objectName:${_MultiPath100kbObjectBufferName}_`, done => { - var hash = crypto.createHash('md5') + const hash = crypto.createHash('md5') client.getObject(bucketName, _MultiPath100kbObjectBufferName, (e, stream) => { if (e) return done(e) stream.on('data', data => hash.update(data)) @@ -324,7 +323,7 @@ describe('functional tests', function () { }) describe('tests for putObject copyObject getObject getPartialObject statObject removeObject', function () { - var tmpFileUpload = `${tmpDir}/${_100kbObjectName}` + const tmpFileUpload = `${tmpDir}/${_100kbObjectName}` step(`fPutObject(bucketName, objectName, filePath, metaData, callback)_bucketName:${bucketName}, objectName:${_100kbObjectName}, filePath: ${tmpFileUpload}_`, done => { fs.writeFileSync(tmpFileUpload, _100kb) client.fPutObject(bucketName, _100kbObjectName, tmpFileUpload, done) @@ -342,7 +341,7 @@ describe('functional tests', function () { }) }) - var tmpFileUploadWithExt = `${tmpDir}/${_100kbObjectName}.txt` + const tmpFileUploadWithExt = `${tmpDir}/${_100kbObjectName}.txt` step(`fPutObject(bucketName, objectName, filePath, metaData, callback)_bucketName:${bucketName}, objectName:${_100kbObjectName}, filePath: ${tmpFileUploadWithExt}, metaData:${metaData}_`, done => { fs.writeFileSync(tmpFileUploadWithExt, _100kb) client.fPutObject(bucketName, _100kbObjectName, tmpFileUploadWithExt, metaData, done) @@ -378,17 +377,17 @@ describe('functional tests', function () { }) step(`putObject(bucketName, objectName, stream, size, metaData, callback)_bucketName:${bucketName}, objectName:${_100kbObjectName}, stream:100kb, size:${_100kb.length}, metaData:${metaData}_`, done => { - var stream = readableStream(_100kb) + const stream = readableStream(_100kb) client.putObject(bucketName, _100kbObjectName, stream, _100kb.length, metaData, done) }) step(`putObject(bucketName, objectName, stream, size, metaData, callback)_bucketName:${bucketName}, objectName:${_100kbObjectName}, stream:100kb, size:${_100kb.length}_`, done => { - var stream = readableStream(_100kb) + const stream = readableStream(_100kb) client.putObject(bucketName, _100kbObjectName, stream, _100kb.length, done) }) step(`getObject(bucketName, objectName, callback)_bucketName:${bucketName}, objectName:${_100kbObjectName}_`, done => { - var hash = crypto.createHash('md5') + const hash = crypto.createHash('md5') client.getObject(bucketName, _100kbObjectName, (e, stream) => { if (e) return done(e) stream.on('data', data => hash.update(data)) @@ -405,7 +404,7 @@ describe('functional tests', function () { }) step(`getObject(bucketName, objectName, callback)_bucketName:${bucketName}, objectName:${_100kbObjectBufferName}_`, done => { - var hash = crypto.createHash('md5') + const hash = crypto.createHash('md5') client.getObject(bucketName, _100kbObjectBufferName, (e, stream) => { if (e) return done(e) stream.on('data', data => hash.update(data)) @@ -433,8 +432,8 @@ describe('functional tests', function () { }) step(`getPartialObject(bucketName, objectName, offset, length, cb)_bucketName:${bucketName}, objectName:${_100kbObjectBufferName}, offset:1024, length=1024_`, done => { - var expectedHash = crypto.createHash('md5').update(_100kb.slice(1024, 2048)).digest('hex') - var hash = crypto.createHash('md5') + const expectedHash = crypto.createHash('md5').update(_100kb.slice(1024, 2048)).digest('hex') + const hash = crypto.createHash('md5') client.getPartialObject(bucketName, _100kbObjectBufferName, 1024, 1024) .then(stream => { stream.on('data', data => hash.update(data)) @@ -447,7 +446,7 @@ describe('functional tests', function () { }) step(`getPartialObject(bucketName, objectName, offset, length, cb)_bucketName:${bucketName}, objectName:${_100kbObjectBufferName}, offset:1024`, done => { - var hash = crypto.createHash('md5') + const hash = crypto.createHash('md5') client.getPartialObject(bucketName, _100kbObjectBufferName, 1024) .then(stream => { stream.on('data', data => hash.update(data)) @@ -469,7 +468,7 @@ describe('functional tests', function () { }) step(`putObject(bucketName, objectName, stream, metadata, cb)_bucketName:${bucketName}, objectName:${_65mbObjectName}_`, done => { - var stream = readableStream(_65mb) + const stream = readableStream(_65mb) client.putObject(bucketName, _65mbObjectName, stream, metaData, () => { setTimeout(() => { if (Object.values(httpAgent.sockets).length === 0) return done() @@ -480,7 +479,7 @@ describe('functional tests', function () { }) step(`getObject(bucketName, objectName, cb)_bucketName:${bucketName}, objectName:${_65mbObjectName}_`, done => { - var hash = crypto.createHash('md5') + const hash = crypto.createHash('md5') client.getObject(bucketName, _65mbObjectName, (e, stream) => { if (e) return done(e) stream.on('data', data => hash.update(data)) @@ -494,16 +493,16 @@ describe('functional tests', function () { step(`getObject(bucketName, objectName, cb)_bucketName:${bucketName} non-existent object`, done => { client.getObject(bucketName, 'an-object-that-does-not-exist', (e, stream) => { - if (stream) return done(new Error("on errors the stream object should not exist")) - if (!e) return done(new Error("expected an error object")) - if (e.code !== 'NoSuchKey') return done(new Error("expected NoSuchKey error")) + if (stream) return done(new Error('on errors the stream object should not exist')) + if (!e) return done(new Error('expected an error object')) + if (e.code !== 'NoSuchKey') return done(new Error('expected NoSuchKey error')) done() }) }) step(`getPartialObject(bucketName, objectName, offset, length, cb)_bucketName:${bucketName}, objectName:${_65mbObjectName}, offset:0, length:100*1024_`, done => { - var hash = crypto.createHash('md5') - var expectedHash = crypto.createHash('md5').update(_65mb.slice(0, 100 * 1024)).digest('hex') + const hash = crypto.createHash('md5') + const expectedHash = crypto.createHash('md5').update(_65mb.slice(0, 100 * 1024)).digest('hex') client.getPartialObject(bucketName, _65mbObjectName, 0, 100 * 1024, (e, stream) => { if (e) return done(e) stream.on('data', data => hash.update(data)) @@ -516,14 +515,14 @@ describe('functional tests', function () { }) step(`copyObject(bucketName, objectName, srcObject, cb)_bucketName:${bucketName}, objectName:${_65mbObjectNameCopy}, srcObject:/${bucketName}/${_65mbObjectName}_`, done => { - client.copyObject(bucketName, _65mbObjectNameCopy, "/" + bucketName + "/" + _65mbObjectName, (e) => { + client.copyObject(bucketName, _65mbObjectNameCopy, '/' + bucketName + '/' + _65mbObjectName, (e) => { if (e) return done(e) done() }) }) step(`copyObject(bucketName, objectName, srcObject)_bucketName:${bucketName}, objectName:${_65mbObjectNameCopy}, srcObject:/${bucketName}/${_65mbObjectName}_`, done => { - client.copyObject(bucketName, _65mbObjectNameCopy, "/" + bucketName + "/" + _65mbObjectName) + client.copyObject(bucketName, _65mbObjectNameCopy, '/' + bucketName + '/' + _65mbObjectName) .then(() => done()) .catch(done) }) @@ -533,9 +532,9 @@ describe('functional tests', function () { if (e) return done(e) if (stat.size !== _65mb.length) return done(new Error('size mismatch')) if (`${metaData.randomstuff}` !== stat.metaData.randomstuff) return done(new Error('metadata "randomstuff" mismatch')) - if (`${metaData["X-Amz-Meta-Testing"]}` !== stat.metaData["testing"]) return done(new Error('metadata "testing" mismatch')) - if (`${metaData["Content-Type"]}` !== stat.metaData["content-type"]) return done(new Error('metadata "content-type" mismatch')) - if (`${metaData["Content-Language"]}` !== stat.metaData["content-language"]) return done(new Error('metadata "content-language" mismatch')) + if (`${metaData['X-Amz-Meta-Testing']}` !== stat.metaData['testing']) return done(new Error('metadata "testing" mismatch')) + if (`${metaData['Content-Type']}` !== stat.metaData['content-type']) return done(new Error('metadata "content-type" mismatch')) + if (`${metaData['Content-Language']}` !== stat.metaData['content-language']) return done(new Error('metadata "content-language" mismatch')) done() }) }) @@ -561,14 +560,14 @@ describe('functional tests', function () { }) describe('tests for copyObject statObject', function () { - var etag - var modifiedDate + let etag + let modifiedDate step(`putObject(bucketName, objectName, stream, metaData, cb)_bucketName:${bucketName}, objectName:${_100kbObjectName}, stream: 100kb, metaData:${metaData}_`, done => { client.putObject(bucketName, _100kbObjectName, _100kb, metaData, done) }) step(`copyObject(bucketName, objectName, srcObject, cb)_bucketName:${bucketName}, objectName:${_100kbObjectNameCopy}, srcObject:/${bucketName}/${_100kbObjectName}_`, done => { - client.copyObject(bucketName, _100kbObjectNameCopy, "/" + bucketName + "/" + _100kbObjectName, (e) => { + client.copyObject(bucketName, _100kbObjectNameCopy, '/' + bucketName + '/' + _100kbObjectName, (e) => { if (e) return done(e) done() }) @@ -588,58 +587,58 @@ describe('functional tests', function () { }) step(`copyObject(bucketName, objectName, srcObject, conditions, cb)_bucketName:${bucketName}, objectName:${_100kbObjectNameCopy}, srcObject:/${bucketName}/${_100kbObjectName}, conditions:ExceptIncorrectEtag_`, done => { - var conds = new minio.CopyConditions() + const conds = new minio.CopyConditions() conds.setMatchETagExcept('TestEtag') - client.copyObject(bucketName, _100kbObjectNameCopy, "/" + bucketName + "/" + _100kbObjectName, conds, (e) => { + client.copyObject(bucketName, _100kbObjectNameCopy, '/' + bucketName + '/' + _100kbObjectName, conds, (e) => { if (e) return done(e) done() }) }) step(`copyObject(bucketName, objectName, srcObject, conditions, cb)_bucketName:${bucketName}, objectName:${_100kbObjectNameCopy}, srcObject:/${bucketName}/${_100kbObjectName}, conditions:ExceptCorrectEtag_`, done => { - var conds = new minio.CopyConditions() + const conds = new minio.CopyConditions() conds.setMatchETagExcept(etag) - client.copyObject(bucketName, _100kbObjectNameCopy, "/" + bucketName + "/" + _100kbObjectName, conds) + client.copyObject(bucketName, _100kbObjectNameCopy, '/' + bucketName + '/' + _100kbObjectName, conds) .then(() => { - done(new Error("CopyObject should have failed.")) + done(new Error('CopyObject should have failed.')) }) .catch(() => done()) }) step(`copyObject(bucketName, objectName, srcObject, conditions, cb)_bucketName:${bucketName}, objectName:${_100kbObjectNameCopy}, srcObject:/${bucketName}/${_100kbObjectName}, conditions:MatchCorrectEtag_`, done => { - var conds = new minio.CopyConditions() + const conds = new minio.CopyConditions() conds.setMatchETag(etag) - client.copyObject(bucketName, _100kbObjectNameCopy, "/" + bucketName + "/" + _100kbObjectName, conds, (e) => { + client.copyObject(bucketName, _100kbObjectNameCopy, '/' + bucketName + '/' + _100kbObjectName, conds, (e) => { if (e) return done(e) done() }) }) step(`copyObject(bucketName, objectName, srcObject, conditions, cb)_bucketName:${bucketName}, objectName:${_100kbObjectNameCopy}, srcObject:/${bucketName}/${_100kbObjectName}, conditions:MatchIncorrectEtag_`, done => { - var conds = new minio.CopyConditions() + const conds = new minio.CopyConditions() conds.setMatchETag('TestETag') - client.copyObject(bucketName, _100kbObjectNameCopy, "/" + bucketName + "/" + _100kbObjectName, conds) + client.copyObject(bucketName, _100kbObjectNameCopy, '/' + bucketName + '/' + _100kbObjectName, conds) .then(() => { - done(new Error("CopyObject should have failed.")) + done(new Error('CopyObject should have failed.')) }) .catch(() => done()) }) step(`copyObject(bucketName, objectName, srcObject, conditions, cb)_bucketName:${bucketName}, objectName:${_100kbObjectNameCopy}, srcObject:/${bucketName}/${_100kbObjectName}, conditions:Unmodified since ${modifiedDate}`, done => { - var conds = new minio.CopyConditions() + const conds = new minio.CopyConditions() conds.setUnmodified(new Date(modifiedDate)) - client.copyObject(bucketName, _100kbObjectNameCopy, "/" + bucketName + "/" + _100kbObjectName, conds, (e) => { + client.copyObject(bucketName, _100kbObjectNameCopy, '/' + bucketName + '/' + _100kbObjectName, conds, (e) => { if (e) return done(e) done() }) }) step(`copyObject(bucketName, objectName, srcObject, conditions, cb)_bucketName:${bucketName}, objectName:${_100kbObjectNameCopy}, srcObject:/${bucketName}/${_100kbObjectName}, conditions:Unmodified since 2010-03-26T12:00:00Z_`, done => { - var conds = new minio.CopyConditions() - conds.setUnmodified(new Date("2010-03-26T12:00:00Z")) - client.copyObject(bucketName, _100kbObjectNameCopy, "/" + bucketName + "/" + _100kbObjectName, conds) + const conds = new minio.CopyConditions() + conds.setUnmodified(new Date('2010-03-26T12:00:00Z')) + client.copyObject(bucketName, _100kbObjectNameCopy, '/' + bucketName + '/' + _100kbObjectName, conds) .then(() => { - done(new Error("CopyObject should have failed.")) + done(new Error('CopyObject should have failed.')) }) .catch(() => done()) }) @@ -665,12 +664,12 @@ describe('functional tests', function () { step(`listIncompleteUploads(bucketName, prefix, recursive)_bucketName:${bucketName}, prefix:${_65mbObjectName}, recursive: true_`, function (done) { // MinIO's ListIncompleteUploads returns an empty list, so skip this on non-AWS. // See: https://github.com/minio/minio/commit/75c43bfb6c4a2ace - let hostSkipList = ['s3.amazonaws.com'] + const hostSkipList = ['s3.amazonaws.com'] if (!hostSkipList.includes(client.host)) { this.skip() } - var found = false + let found = false client.listIncompleteUploads(bucketName, _65mbObjectName, true) .on('error', e => done(e)) .on('data', data => { @@ -684,13 +683,13 @@ describe('functional tests', function () { step(`listIncompleteUploads(bucketName, prefix, recursive)_bucketName:${bucketName}, recursive: true_`, function (done) { // MinIO's ListIncompleteUploads returns an empty list, so skip this on non-AWS. // See: https://github.com/minio/minio/commit/75c43bfb6c4a2ace - let hostSkipList = ['s3.amazonaws.com'] + const hostSkipList = ['s3.amazonaws.com'] if (!hostSkipList.includes(client.host)) { this.skip() } - var found = false - client.listIncompleteUploads(bucketName, "", true) + let found = false + client.listIncompleteUploads(bucketName, '', true) .on('error', e => done(e)) .on('data', data => { if (data.key === _65mbObjectName) found = true @@ -708,8 +707,8 @@ describe('functional tests', function () { }) describe('fPutObject fGetObject', function () { - var tmpFileUpload = `${tmpDir}/${_65mbObjectName}` - var tmpFileDownload = `${tmpDir}/${_65mbObjectName}.download` + const tmpFileUpload = `${tmpDir}/${_65mbObjectName}` + const tmpFileDownload = `${tmpDir}/${_65mbObjectName}.download` step(`fPutObject(bucketName, objectName, filePath, callback)_bucketName:${bucketName}, objectName:${_65mbObjectName}, filePath:${tmpFileUpload}_`, done => { fs.writeFileSync(tmpFileUpload, _65mb) @@ -725,7 +724,7 @@ describe('functional tests', function () { step(`fGetObject(bucketName, objectName, filePath, callback)_bucketName:${bucketName}, objectName:${_65mbObjectName}, filePath:${tmpFileDownload}_`, done => { client.fGetObject(bucketName, _65mbObjectName, tmpFileDownload) .then(() => { - var md5sum = crypto.createHash('md5').update(fs.readFileSync(tmpFileDownload)).digest('hex') + const md5sum = crypto.createHash('md5').update(fs.readFileSync(tmpFileDownload)).digest('hex') if (md5sum === _65mbmd5) return done() return done(new Error('md5sum mismatch')) }) @@ -758,10 +757,10 @@ describe('functional tests', function () { }) }) describe('fGetObject-resume', () => { - var localFile = `${tmpDir}/${_5mbObjectName}` - var etag = '' + const localFile = `${tmpDir}/${_5mbObjectName}` + let etag = '' step(`putObject(bucketName, objectName, stream, metaData, cb)_bucketName:${bucketName}, objectName:${_5mbObjectName}, stream:5mb_`, done => { - var stream = readableStream(_5mb) + const stream = readableStream(_5mb) client.putObject(bucketName, _5mbObjectName, stream, _5mb.length, {}) .then((resp) => { etag = resp @@ -770,14 +769,14 @@ describe('functional tests', function () { .catch(done) }) step(`fGetObject(bucketName, objectName, filePath, callback)_bucketName:${bucketName}, objectName:${_5mbObjectName}, filePath:${localFile}`, done => { - var bufPart = Buffer.alloc(_100kb.length) + const bufPart = Buffer.alloc(_100kb.length) _5mb.copy(bufPart, 0, 0, _100kb.length) - var tmpFile = `${tmpDir}/${_5mbObjectName}.${etag}.part.minio` + const tmpFile = `${tmpDir}/${_5mbObjectName}.${etag}.part.minio` // create a partial file fs.writeFileSync(tmpFile, bufPart) client.fGetObject(bucketName, _5mbObjectName, localFile) .then(() => { - var md5sum = crypto.createHash('md5').update(fs.readFileSync(localFile)).digest('hex') + const md5sum = crypto.createHash('md5').update(fs.readFileSync(localFile)).digest('hex') if (md5sum === _5mbmd5) return done() return done(new Error('md5sum mismatch')) }) @@ -790,7 +789,7 @@ describe('functional tests', function () { }) describe('bucket policy', () => { - let policy = `{"Version":"2012-10-17","Statement":[{"Action":["s3:GetBucketLocation","s3:ListBucket"],"Effect":"Allow","Principal":{"AWS":["*"]},"Resource":["arn:aws:s3:::${bucketName}"],"Sid":""},{"Action":["s3:GetObject"],"Effect":"Allow","Principal":{"AWS":["*"]},"Resource":["arn:aws:s3:::${bucketName}/*"],"Sid":""}]}` + const policy = `{"Version":"2012-10-17","Statement":[{"Action":["s3:GetBucketLocation","s3:ListBucket"],"Effect":"Allow","Principal":{"AWS":["*"]},"Resource":["arn:aws:s3:::${bucketName}"],"Sid":""},{"Action":["s3:GetObject"],"Effect":"Allow","Principal":{"AWS":["*"]},"Resource":["arn:aws:s3:::${bucketName}/*"],"Sid":""}]}` step(`setBucketPolicy(bucketName, bucketPolicy, cb)_bucketName:${bucketName}, bucketPolicy:${policy}_`, done => { client.setBucketPolicy(bucketName, policy, err => { @@ -805,7 +804,7 @@ describe('functional tests', function () { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) if (!response) { - return done(new Error(`policy is empty`)) + return done(new Error('policy is empty')) } done() }) @@ -816,14 +815,14 @@ describe('functional tests', function () { step(`presignedPutObject(bucketName, objectName, expires, cb)_bucketName:${bucketName}, objectName:${_1byteObjectName}, expires: 1000_`, done => { client.presignedPutObject(bucketName, _1byteObjectName, 1000, (e, presignedUrl) => { if (e) return done(e) - var transport = http - var options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + let transport = http + const options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) options.method = 'PUT' options.headers = { 'content-length': _1byte.length } if (options.protocol === 'https:') transport = https - var request = transport.request(options, (response) => { + const request = transport.request(options, (response) => { if (response.statusCode !== 200) return done(new Error(`error on put : ${response.statusCode}`)) response.on('error', e => done(e)) response.on('end', () => done()) @@ -854,13 +853,13 @@ describe('functional tests', function () { step(`presignedGetObject(bucketName, objectName, expires, cb)_bucketName:${bucketName}, objectName:${_1byteObjectName}, expires:1000_`, done => { client.presignedGetObject(bucketName, _1byteObjectName, 1000, (e, presignedUrl) => { if (e) return done(e) - var transport = http - var options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + let transport = http + const options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) options.method = 'GET' if (options.protocol === 'https:') transport = https - var request = transport.request(options, (response) => { + const request = transport.request(options, (response) => { if (response.statusCode !== 200) return done(new Error(`error on put : ${response.statusCode}`)) - var error = null + let error = null response.on('error', e => done(e)) response.on('end', () => done(error)) response.on('data', (data) => { @@ -877,13 +876,13 @@ describe('functional tests', function () { step(`presignedUrl(httpMethod, bucketName, objectName, expires, cb)_httpMethod:GET, bucketName:${bucketName}, objectName:${_1byteObjectName}, expires:1000_`, done => { client.presignedUrl('GET', bucketName, _1byteObjectName, 1000, (e, presignedUrl) => { if (e) return done(e) - var transport = http - var options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + let transport = http + const options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) options.method = 'GET' if (options.protocol === 'https:') transport = https - var request = transport.request(options, (response) => { + const request = transport.request(options, (response) => { if (response.statusCode !== 200) return done(new Error(`error on put : ${response.statusCode}`)) - var error = null + let error = null response.on('error', e => done(e)) response.on('end', () => done(error)) response.on('data', (data) => { @@ -898,17 +897,17 @@ describe('functional tests', function () { }) step(`presignedUrl(httpMethod, bucketName, objectName, expires, cb)_httpMethod:GET, bucketName:${bucketName}, objectName:${_1byteObjectName}, expires:86400, requestDate:StartOfDay_`, done => { - var requestDate = new Date() + const requestDate = new Date() requestDate.setHours(0, 0, 0, 0) client.presignedUrl('GET', bucketName, _1byteObjectName, 86400, requestDate, (e, presignedUrl) => { if (e) return done(e) - var transport = http - var options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + let transport = http + const options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) options.method = 'GET' if (options.protocol === 'https:') transport = https - var request = transport.request(options, (response) => { + const request = transport.request(options, (response) => { if (response.statusCode !== 200) return done(new Error(`error on put : ${response.statusCode}`)) - var error = null + let error = null response.on('error', e => done(e)) response.on('end', () => done(error)) response.on('data', (data) => { @@ -925,13 +924,13 @@ describe('functional tests', function () { step(`presignedGetObject(bucketName, objectName, cb)_bucketName:${bucketName}, objectName:${_1byteObjectName}_`, done => { client.presignedGetObject(bucketName, _1byteObjectName, (e, presignedUrl) => { if (e) return done(e) - var transport = http - var options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + let transport = http + const options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) options.method = 'GET' if (options.protocol === 'https:') transport = https - var request = transport.request(options, (response) => { + const request = transport.request(options, (response) => { if (response.statusCode !== 200) return done(new Error(`error on put : ${response.statusCode}`)) - var error = null + let error = null response.on('error', e => done(e)) response.on('end', () => done(error)) response.on('data', (data) => { @@ -952,7 +951,7 @@ describe('functional tests', function () { }) step(`presignedGetObject(bucketName, objectName, expires, respHeaders, cb)_bucketName:${bucketName}, objectName:${_1byteObjectName}, expires:1000_`, done => { - var respHeaders = { + const respHeaders = { 'response-content-type': 'text/html', 'response-content-language': 'en', 'response-expires': 'Sun, 07 Jun 2020 16:07:58 GMT', @@ -962,29 +961,29 @@ describe('functional tests', function () { } client.presignedGetObject(bucketName, _1byteObjectName, 1000, respHeaders, (e, presignedUrl) => { if (e) return done(e) - var transport = http - var options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + let transport = http + const options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) options.method = 'GET' if (options.protocol === 'https:') transport = https - var request = transport.request(options, (response) => { + const request = transport.request(options, (response) => { if (response.statusCode !== 200) return done(new Error(`error on get : ${response.statusCode}`)) if (respHeaders['response-content-type'] !== response.headers['content-type']) { - return done(new Error(`content-type header mismatch`)) + return done(new Error('content-type header mismatch')) } if (respHeaders['response-content-language'] !== response.headers['content-language']) { - return done(new Error(`content-language header mismatch`)) + return done(new Error('content-language header mismatch')) } if (respHeaders['response-expires'] !== response.headers['expires']) { - return done(new Error(`expires header mismatch`)) + return done(new Error('expires header mismatch')) } if (respHeaders['response-cache-control'] !== response.headers['cache-control']) { - return done(new Error(`cache-control header mismatch`)) + return done(new Error('cache-control header mismatch')) } if (respHeaders['response-content-disposition'] !== response.headers['content-disposition']) { - return done(new Error(`content-disposition header mismatch`)) + return done(new Error('content-disposition header mismatch')) } if (respHeaders['response-content-encoding'] !== response.headers['content-encoding']) { - return done(new Error(`content-encoding header mismatch`)) + return done(new Error('content-encoding header mismatch')) } response.on('data', () => {}) done() @@ -995,19 +994,19 @@ describe('functional tests', function () { }) step(`presignedGetObject(bucketName, objectName, respHeaders, cb)_bucketName:${bucketName}, objectName:${_1byteObjectName}, contentDisposition special chars`, done => { - var respHeaders = { - 'response-content-disposition': 'attachment; filename="abc|"@#$%&/(<>)/=?!{[\']}+*-_:,;def.png"; filename*=UTF-8\'\'t&21st&20ng.png', + const respHeaders = { + 'response-content-disposition': 'attachment; filename="abc|"@#$%&/(<>)/=?!{[\']}+*-_:,;def.png"; filename*=UTF-8\'\'t&21st&20ng.png' } client.presignedGetObject(bucketName, _1byteObjectName, 1000, respHeaders, (e, presignedUrl) => { if (e) return done(e) - var transport = http - var options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + let transport = http + const options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) options.method = 'GET' if (options.protocol === 'https:') transport = https - var request = transport.request(options, (response) => { + const request = transport.request(options, (response) => { if (response.statusCode !== 200) return done(new Error(`error on get : ${response.statusCode}`)) if (respHeaders['response-content-disposition'] !== response.headers['content-disposition']) { - return done(new Error(`content-disposition header mismatch`)) + return done(new Error('content-disposition header mismatch')) } response.on('data', () => {}) done() @@ -1018,17 +1017,17 @@ describe('functional tests', function () { }) step(`presignedGetObject(bucketName, objectName, cb)_bucketName:${bucketName}, objectName:${_1byteObjectName}, expires:86400, requestDate:StartOfDay_`, done => { - var requestDate = new Date() + const requestDate = new Date() requestDate.setHours(0, 0, 0, 0) client.presignedGetObject(bucketName, _1byteObjectName, 86400, {}, requestDate, (e, presignedUrl) => { if (e) return done(e) - var transport = http - var options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + let transport = http + const options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) options.method = 'GET' if (options.protocol === 'https:') transport = https - var request = transport.request(options, (response) => { + const request = transport.request(options, (response) => { if (response.statusCode !== 200) return done(new Error(`error on put : ${response.statusCode}`)) - var error = null + let error = null response.on('error', e => done(e)) response.on('end', () => done(error)) response.on('data', (data) => { @@ -1043,16 +1042,16 @@ describe('functional tests', function () { }) step('presignedPostPolicy(postPolicy, cb)_postPolicy:expiresin10days_', done => { - var policy = client.newPostPolicy() + const policy = client.newPostPolicy() policy.setKey(_1byteObjectName) policy.setBucket(bucketName) - var expires = new Date + const expires = new Date expires.setSeconds(24 * 60 * 60 * 10) policy.setExpires(expires) client.presignedPostPolicy(policy, (e, data) => { if (e) return done(e) - var req = superagent.post(data.postURL) + const req = superagent.post(data.postURL) _.each(data.formData, (value, key) => req.field(key, value)) req.attach('file', Buffer.from([_1byte]), 'test') req.end(function (e) { @@ -1064,14 +1063,14 @@ describe('functional tests', function () { }) step('presignedPostPolicy(postPolicy, cb)_postPolicy:setContentType', done => { - var policy = client.newPostPolicy() + const policy = client.newPostPolicy() policy.setKey(_1byteObjectName) policy.setBucket(bucketName) policy.setContentType('text/plain') client.presignedPostPolicy(policy, (e, data) => { if (e) return done(e) - var req = superagent.post(data.postURL) + const req = superagent.post(data.postURL) _.each(data.formData, (value, key) => req.field(key, value)) req.attach('file', Buffer.from([_1byte]), 'test') req.end(function(e) { @@ -1083,14 +1082,14 @@ describe('functional tests', function () { }) step('presignedPostPolicy(postPolicy, cb)_postPolicy:setContentTypeStartsWith', done => { - var policy = client.newPostPolicy() + const policy = client.newPostPolicy() policy.setKey(_1byteObjectName) policy.setBucket(bucketName) policy.setContentTypeStartsWith('text/') client.presignedPostPolicy(policy, (e, data) => { if (e) return done(e) - var req = superagent.post(data.postURL) + const req = superagent.post(data.postURL) _.each(data.formData, (value, key) => req.field(key, value)) req.attach('file', Buffer.from([_1byte]), 'test') req.end(function(e) { @@ -1102,15 +1101,15 @@ describe('functional tests', function () { }) step('presignedPostPolicy(postPolicy, cb)_postPolicy:setContentDisposition_inline', done => { - var policy = client.newPostPolicy() - var objectName = 'test-content-disposition' + uuid.v4() + const policy = client.newPostPolicy() + const objectName = 'test-content-disposition' + uuid.v4() policy.setKey(objectName) policy.setBucket(bucketName) policy.setContentDisposition('inline') client.presignedPostPolicy(policy, (e, data) => { if (e) return done(e) - var req = superagent.post(data.postURL) + const req = superagent.post(data.postURL) _.each(data.formData, (value, key) => req.field(key, value)) req.attach('file', Buffer.from([_1byte]), 'test') req.end(function(e) { @@ -1122,15 +1121,15 @@ describe('functional tests', function () { }) step('presignedPostPolicy(postPolicy, cb)_postPolicy:setContentDisposition_attachment', done => { - var policy = client.newPostPolicy() - var objectName = 'test-content-disposition' + uuid.v4() + const policy = client.newPostPolicy() + const objectName = 'test-content-disposition' + uuid.v4() policy.setKey(objectName) policy.setBucket(bucketName) policy.setContentDisposition('attachment; filename= My* Docume! nt.json') client.presignedPostPolicy(policy, (e, data) => { if (e) return done(e) - var req = superagent.post(data.postURL) + const req = superagent.post(data.postURL) _.each(data.formData, (value, key) => req.field(key, value)) req.attach('file', Buffer.from([_1byte]), 'test') req.end(function (e) { @@ -1142,8 +1141,8 @@ describe('functional tests', function () { }) step('presignedPostPolicy(postPolicy, cb)_postPolicy:setUserMetaData_', done => { - var policy = client.newPostPolicy() - var objectName = 'test-metadata' + uuid.v4() + const policy = client.newPostPolicy() + const objectName = 'test-metadata' + uuid.v4() policy.setKey(objectName) policy.setBucket(bucketName) policy.setUserMetaData({ @@ -1153,7 +1152,7 @@ describe('functional tests', function () { client.presignedPostPolicy(policy, (e, data) => { if (e) return done(e) - var req = superagent.post(data.postURL) + const req = superagent.post(data.postURL) _.each(data.formData, (value, key) => req.field(key, value)) req.attach('file', Buffer.from([_1byte]), 'test') req.end(function(e) { @@ -1175,14 +1174,14 @@ describe('functional tests', function () { step(`presignedUrl(httpMethod, bucketName, objectName, expires, reqParams, cb)_httpMethod:GET, bucketName:${bucketName}, expires:1000_`, done => { client.presignedUrl('GET', bucketName, '', 1000, {'prefix': 'data', 'max-keys': 1000}, (e, presignedUrl) => { if (e) return done(e) - var transport = http - var options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + let transport = http + const options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) options.method = 'GET' options.headers = { } - var str = '' + let str = '' if (options.protocol === 'https:') transport = https - var callback = function (response) { + const callback = function (response) { if (response.statusCode !== 200) return done(new Error(`error on put : ${response.statusCode}`)) response.on('error', e => done(e)) response.on('end', function () { @@ -1195,7 +1194,7 @@ describe('functional tests', function () { str += chunk }) } - var request = transport.request(options, callback) + const request = transport.request(options, callback) request.end() }) }) @@ -1203,13 +1202,13 @@ describe('functional tests', function () { step(`presignedUrl(httpMethod, bucketName, objectName, expires, cb)_httpMethod:DELETE, bucketName:${bucketName}, objectName:${_1byteObjectName}, expires:1000_`, done => { client.presignedUrl('DELETE', bucketName, _1byteObjectName, 1000, (e, presignedUrl) => { if (e) return done(e) - var transport = http - var options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + let transport = http + const options = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) options.method = 'DELETE' options.headers = { } if (options.protocol === 'https:') transport = https - var request = transport.request(options, (response) => { + const request = transport.request(options, (response) => { if (response.statusCode !== 204) return done(new Error(`error on put : ${response.statusCode}`)) response.on('error', e => done(e)) response.on('end', () => done()) @@ -1222,11 +1221,11 @@ describe('functional tests', function () { }) describe('listObjects', function () { - var listObjectPrefix = 'miniojsPrefix' - var listObjectsNum = 10 - var objArray = [] - var listArray = [] - var listPrefixArray = [] + const listObjectPrefix = 'miniojsPrefix' + const listObjectsNum = 10 + let objArray = [] + let listArray = [] + const listPrefixArray = [] step(`putObject(bucketName, objectName, stream, size, metaData, callback)_bucketName:${bucketName}, stream:1b, size:1_Create ${listObjectsNum} objects`, done => { _.times(listObjectsNum, i => objArray.push(`${listObjectPrefix}.${i}`)) @@ -1253,9 +1252,9 @@ describe('functional tests', function () { step('listObjects(bucketName, prefix, recursive)_recursive:true_', done => { try { - client.listObjects("", "", true) + client.listObjects('', '', true) .on('end', () => { - return done(new Error(`listObjects should throw exception when empty bucketname is passed`)) + return done(new Error('listObjects should throw exception when empty bucketname is passed')) }) } catch (e) { if (e.name === 'InvalidBucketNameError') { @@ -1316,10 +1315,10 @@ describe('functional tests', function () { }) describe('removeObjects', function () { - var listObjectPrefix = 'miniojsPrefix' - var listObjectsNum = 10 - var objArray = [] - var objectsList = [] + const listObjectPrefix = 'miniojsPrefix' + const listObjectsNum = 10 + let objArray = [] + let objectsList = [] step(`putObject(bucketName, objectName, stream, size, contentType, callback)_bucketName:${bucketName}, stream:1b, size:1_Create ${listObjectsNum} objects`, done => { _.times(listObjectsNum, i => objArray.push(`${listObjectPrefix}.${i}`)) @@ -1343,7 +1342,7 @@ describe('functional tests', function () { } }) } catch (e) { - if (e.name === "InvalidArgumentError") { + if (e.name === 'InvalidArgumentError') { done() } } @@ -1378,7 +1377,7 @@ describe('functional tests', function () { .catch(done) }) - step(`removeObjects with non latin characters`, done => { + step('removeObjects with non latin characters', done => { client.removeObjects(bucketName, ['fileΩ']) .then(() => done()) .catch(done) @@ -1392,14 +1391,14 @@ describe('functional tests', function () { before(function () { // listenBucketNotification only works on MinIO, so skip if // the host is Amazon. - let hostSkipList = ['s3.amazonaws.com'] + const hostSkipList = ['s3.amazonaws.com'] if (hostSkipList.includes(client.host)) { this.skip() } }) step(`listenBucketNotification(bucketName, prefix, suffix, events)_bucketName:${bucketName}, prefix:photos/, suffix:.jpg, events:bad_`, done => { - let poller = client.listenBucketNotification(bucketName, 'photos/', '.jpg', ['bad']) + const poller = client.listenBucketNotification(bucketName, 'photos/', '.jpg', ['bad']) poller.on('error', error => { if (error.code !== 'NotImplemented') { assert.match(error.message, /A specified event is not supported for notifications./) @@ -1409,7 +1408,7 @@ describe('functional tests', function () { }) }) step(`listenBucketNotification(bucketName, prefix, suffix, events)_bucketName:${bucketName}, events: s3:ObjectCreated:*_`, done => { - let poller = client.listenBucketNotification(bucketName, '', '', ['s3:ObjectCreated:*']) + const poller = client.listenBucketNotification(bucketName, '', '', ['s3:ObjectCreated:*']) let records = 0 let pollerError = null poller.on('notification', record => { @@ -1448,7 +1447,7 @@ describe('functional tests', function () { // This test is very similar to that above, except it does not include // Minio.ObjectCreatedAll in the config. Thus, no events should be emitted. step(`listenBucketNotification(bucketName, prefix, suffix, events)_bucketName:${bucketName}, events:s3:ObjectRemoved:*`, done => { - let poller = client.listenBucketNotification(bucketName, '', '', ['s3:ObjectRemoved:*']) + const poller = client.listenBucketNotification(bucketName, '', '', ['s3:ObjectRemoved:*']) poller.on('notification', assert.fail) poller.on('error', error => { if (error.code !== 'NotImplemented') { @@ -1472,35 +1471,35 @@ describe('functional tests', function () { describe('Bucket Versioning API', () => { // Isolate the bucket/object for easy debugging and tracking. - const versionedBucketName = "minio-js-test-version-" + uuid.v4() + const versionedBucketName = 'minio-js-test-version-' + uuid.v4() before((done) => client.makeBucket(versionedBucketName, '', done)) after((done) => client.removeBucket(versionedBucketName, done)) describe('Versioning Steps test', function () { - step("Check if versioning is enabled on a bucket", done => { + step('Check if versioning is enabled on a bucket', done => { client.getBucketVersioning(versionedBucketName, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) done() }) }) - step("Enable versioning on a bucket", done => { - client.setBucketVersioning(versionedBucketName, {Status: "Enabled"}, (err) => { + step('Enable versioning on a bucket', done => { + client.setBucketVersioning(versionedBucketName, {Status: 'Enabled'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) done() }) }) - step("Suspend versioning on a bucket", done => { - client.setBucketVersioning(versionedBucketName, {Status: "Suspended"}, (err) => { + step('Suspend versioning on a bucket', done => { + client.setBucketVersioning(versionedBucketName, {Status: 'Suspended'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) done() }) }) - step("Check if versioning is Suspended on a bucket", done => { + step('Check if versioning is Suspended on a bucket', done => { client.getBucketVersioning(versionedBucketName, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) @@ -1513,7 +1512,7 @@ describe('functional tests', function () { describe('Versioning tests on a buckets', function () { // Isolate the bucket/object for easy debugging and tracking. - const versionedBucketName = "minio-js-test-version-" + uuid.v4() + const versionedBucketName = 'minio-js-test-version-' + uuid.v4() const versioned_100kbObjectName = 'datafile-100-kB' const versioned_100kb_Object = dataDir ? fs.readFileSync(dataDir + '/' + versioned_100kbObjectName) : Buffer.alloc(100 * 1024, 0) @@ -1524,7 +1523,7 @@ describe('functional tests', function () { let versionId step(`setBucketVersioning(bucketName, versionConfig):_bucketName:${versionedBucketName},versionConfig:{Status:"Enabled"} `, (done) => { - client.setBucketVersioning(versionedBucketName, {Status: "Enabled"}, (err) => { + client.setBucketVersioning(versionedBucketName, {Status: 'Enabled'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) done() @@ -1551,7 +1550,7 @@ describe('functional tests', function () { }) step(`setBucketVersioning(bucketName, versionConfig):_bucketName:${versionedBucketName},versionConfig:{Status:"Suspended"}`, (done) => { - client.setBucketVersioning(versionedBucketName, {Status: "Suspended"}, (err) => { + client.setBucketVersioning(versionedBucketName, {Status: 'Suspended'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) done() @@ -1563,7 +1562,7 @@ describe('functional tests', function () { describe('Versioning tests on a buckets: getObject, fGetObject, getPartialObject, putObject, removeObject with versionId support', function () { // Isolate the bucket/object for easy debugging and tracking. - const versionedBucketName = "minio-js-test-version-" + uuid.v4() + const versionedBucketName = 'minio-js-test-version-' + uuid.v4() const versioned_100kbObjectName = 'datafile-100-kB' const versioned_100kb_Object = dataDir ? fs.readFileSync(dataDir + '/' + versioned_100kbObjectName) : Buffer.alloc(100 * 1024, 0) @@ -1573,7 +1572,7 @@ describe('functional tests', function () { describe('Versioning Test for getObject, getPartialObject, putObject, removeObject with versionId support', function () { let versionId = null step(`Enable Versioning on Bucket: setBucketVersioning(bucketName,versioningConfig)_bucketName:${versionedBucketName},{Status:"Enabled"}`, (done) => { - client.setBucketVersioning(versionedBucketName, {Status: "Enabled"}, (err) => { + client.setBucketVersioning(versionedBucketName, {Status: 'Enabled'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) done() @@ -1609,7 +1608,7 @@ describe('functional tests', function () { step(`fGetObject(bucketName, objectName, filePath, getOpts={})_bucketName:${versionedBucketName}, objectName:${versioned_100kbObjectName}`, done => { if (versionId) { - var tmpFileDownload = `${tmpDir}/${versioned_100kbObjectName}.download` + const tmpFileDownload = `${tmpDir}/${versioned_100kbObjectName}.download` client.fGetObject(versionedBucketName, versioned_100kbObjectName, tmpFileDownload, {versionId: versionId}, function () { done() }) @@ -1648,7 +1647,7 @@ describe('functional tests', function () { }) step(`setBucketVersioning(bucketName, versionConfig):_bucketName:${versionedBucketName},versionConfig:{Status:"Suspended"}`, (done) => { - client.setBucketVersioning(versionedBucketName, {Status: "Suspended"}, (err) => { + client.setBucketVersioning(versionedBucketName, {Status: 'Suspended'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) done() @@ -1659,19 +1658,19 @@ describe('functional tests', function () { }) describe('Versioning Supported listObjects', function () { - const versionedBucketName = "minio-js-test-version-list" + uuid.v4() - const prefixName = "Prefix1" - const versionedObjectName = "datafile-100-kB" + const versionedBucketName = 'minio-js-test-version-list' + uuid.v4() + const prefixName = 'Prefix1' + const versionedObjectName = 'datafile-100-kB' const objVersionIdCounter = [1, 2, 3, 4, 5] // This should track adding 5 versions of the same object. - let listObjectsNum = objVersionIdCounter.length - let objArray = [] + const listObjectsNum = objVersionIdCounter.length + const objArray = [] let listPrefixArray = [] let isVersioningSupported = false const objNameWithPrefix = `${prefixName}/${versionedObjectName}` before((done) => client.makeBucket(versionedBucketName, '', () => { - client.setBucketVersioning(versionedBucketName, {Status: "Enabled"}, (err) => { + client.setBucketVersioning(versionedBucketName, {Status: 'Enabled'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) isVersioningSupported = true @@ -1752,7 +1751,7 @@ describe('functional tests', function () { describe('Versioning tests on a bucket for Deletion of Multiple versions', function () { // Isolate the bucket/object for easy debugging and tracking. - const versionedBucketName = "minio-js-test-version-" + uuid.v4() + const versionedBucketName = 'minio-js-test-version-' + uuid.v4() const versioned_100kbObjectName = 'datafile-100-kB' const versioned_100kb_Object = dataDir ? fs.readFileSync(dataDir + '/' + versioned_100kbObjectName) : Buffer.alloc(100 * 1024, 0) @@ -1764,7 +1763,7 @@ describe('functional tests', function () { let isVersioningSupported = false const objVersionList = [] step(`setBucketVersioning(bucketName, versionConfig):_bucketName:${versionedBucketName},versionConfig:{Status:"Enabled"} `, (done) => { - client.setBucketVersioning(versionedBucketName, {Status: "Enabled"}, (err) => { + client.setBucketVersioning(versionedBucketName, {Status: 'Enabled'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) isVersioningSupported = true @@ -1833,7 +1832,7 @@ describe('functional tests', function () { describe('Bucket Tags API', () => { // Isolate the bucket/object for easy debugging and tracking. - const tagsBucketName = "minio-js-test-tags-" + uuid.v4() + const tagsBucketName = 'minio-js-test-tags-' + uuid.v4() before((done) => client.makeBucket(tagsBucketName, '', done)) after((done) => client.removeBucket(tagsBucketName, done)) @@ -1869,7 +1868,7 @@ describe('functional tests', function () { describe('Object Tags API', () => { // Isolate the bucket/object for easy debugging and tracking. - const tagsBucketName = "minio-js-test-tags-" + uuid.v4() + const tagsBucketName = 'minio-js-test-tags-' + uuid.v4() before((done) => client.makeBucket(tagsBucketName, '', done)) after((done) => client.removeBucket(tagsBucketName, done)) @@ -1922,7 +1921,7 @@ describe('functional tests', function () { describe('Object Tags API with Versioning support', () => { // Isolate the bucket/object for easy debugging and tracking. - const tagsVersionedBucketName = "minio-js-test-tags-version-" + uuid.v4() + const tagsVersionedBucketName = 'minio-js-test-tags-version-' + uuid.v4() before((done) => client.makeBucket(tagsVersionedBucketName, '', done)) after((done) => client.removeBucket(tagsVersionedBucketName, done)) @@ -1935,7 +1934,7 @@ describe('functional tests', function () { describe('set, get and remove Tags on a versioned object', function () { step(`Enable Versioning on Bucket: setBucketVersioning(bucketName,versioningConfig)_bucketName:${tagsVersionedBucketName},{Status:"Enabled"}`, (done) => { - client.setBucketVersioning(tagsVersionedBucketName, {Status: "Enabled"}, (err) => { + client.setBucketVersioning(tagsVersionedBucketName, {Status: 'Enabled'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) isVersioningSupported = true @@ -1976,7 +1975,7 @@ describe('functional tests', function () { if (isArray(tagList)) { done() } - })}else{ + })} else { done() } }) @@ -2007,7 +2006,7 @@ describe('functional tests', function () { }) describe('Bucket Lifecycle API', () => { - const bucketName = "minio-js-test-lifecycle-" + uuid.v4() + const bucketName = 'minio-js-test-lifecycle-' + uuid.v4() before((done) => client.makeBucket(bucketName, '', done)) after((done) => client.removeBucket(bucketName, done)) @@ -2015,13 +2014,13 @@ describe('functional tests', function () { step(`Set lifecycle config on a bucket:_bucketName:${bucketName}`, done => { const lifecycleConfig = { Rule: [{ - "ID": "Transition and Expiration Rule", - "Status": "Enabled", - "Filter": { - "Prefix": "", + 'ID': 'Transition and Expiration Rule', + 'Status': 'Enabled', + 'Filter': { + 'Prefix': '' }, - "Expiration": { - "Days": "3650" + 'Expiration': { + 'Days': '3650' } }]} client.setBucketLifecycle(bucketName, lifecycleConfig, (err) => { @@ -2031,7 +2030,7 @@ describe('functional tests', function () { }) }) - step("Set lifecycle config of a bucket", done => { + step('Set lifecycle config of a bucket', done => { client.getBucketLifecycle(bucketName, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) @@ -2039,7 +2038,7 @@ describe('functional tests', function () { }) }) - step("Remove lifecycle config of a bucket", done => { + step('Remove lifecycle config of a bucket', done => { client.removeBucketLifecycle(bucketName, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) @@ -2062,7 +2061,7 @@ describe('functional tests', function () { * 6. Cleanup bucket. */ - const versionedBucketName = "minio-js-test-ver-presign-" + uuid.v4() + const versionedBucketName = 'minio-js-test-ver-presign-' + uuid.v4() const versionedPresignObjName = 'datafile-1-b' const _100_byte = Buffer.alloc(100 * 1024, 0) const _200_byte = Buffer.alloc(200 * 1024, 0) @@ -2072,7 +2071,7 @@ describe('functional tests', function () { before((done) => client.makeBucket(versionedBucketName, '', () => { - client.setBucketVersioning(versionedBucketName, {Status: "Enabled"}, (err) => { + client.setBucketVersioning(versionedBucketName, {Status: 'Enabled'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) isVersioningSupported = true @@ -2090,7 +2089,7 @@ describe('functional tests', function () { done(e) } let mobileClientReqWithProtocol = http - var upldRequestOptions = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + const upldRequestOptions = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) upldRequestOptions.method = 'PUT' upldRequestOptions.headers = { 'content-length': _100_byte.length @@ -2131,7 +2130,7 @@ describe('functional tests', function () { done(e) } let mobileClientReqWithProtocol = http - var upldRequestOptions = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) + const upldRequestOptions = _.pick(url.parse(presignedUrl), ['hostname', 'port', 'path', 'protocol']) upldRequestOptions.method = 'PUT' upldRequestOptions.headers = { 'content-length': _200_byte.length @@ -2213,7 +2212,7 @@ describe('functional tests', function () { if (hashValue === _100kbmd5) { done() } else { - return done(new Error("Unable to retrieve version of an object using presignedGetObject")) + return done(new Error('Unable to retrieve version of an object using presignedGetObject')) } }) response.on('data', (data) => { @@ -2249,7 +2248,7 @@ describe('functional tests', function () { // Gateway mode does not support this header. describe('Object Lock support makeBucket API Tests', function () { - const lockEnabledBucketName = "minio-js-test-lock-mb-" + uuid.v4() + const lockEnabledBucketName = 'minio-js-test-lock-mb-' + uuid.v4() let isFeatureSupported = false step(`Check if bucket with object lock can be created:_bucketName:${lockEnabledBucketName}`, done => { client.makeBucket(lockEnabledBucketName, {ObjectLocking: true}, (err) => { @@ -2287,7 +2286,7 @@ describe('functional tests', function () { }) describe('Object Lock support Set/Get API Tests', function () { - const lockConfigBucketName = "minio-js-test-lock-conf-" + uuid.v4() + const lockConfigBucketName = 'minio-js-test-lock-conf-' + uuid.v4() let isFeatureSupported = false step(`Check if bucket with object lock can be created:_bucketName:${lockConfigBucketName}`, done => { client.makeBucket(lockConfigBucketName, {ObjectLocking: true}, (err) => { @@ -2299,7 +2298,7 @@ describe('functional tests', function () { }) step(`Update or replace lock config on a bucket:_bucketName:${lockConfigBucketName}`, done => { if (isFeatureSupported) { - client.setObjectLockConfig(lockConfigBucketName, {mode:"GOVERNANCE",unit:'Years', validity:2 }, (err) => { + client.setObjectLockConfig(lockConfigBucketName, {mode:'GOVERNANCE', unit:'Years', validity:2 }, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) done() @@ -2364,8 +2363,8 @@ describe('functional tests', function () { // Gateway mode does not support this header. describe('Object retention get/set API Test', function () { - const objRetentionBucket = "minio-js-test-retention-" + uuid.v4() - const retentionObjName = "RetentionObject" + const objRetentionBucket = 'minio-js-test-retention-' + uuid.v4() + const retentionObjName = 'RetentionObject' let isFeatureSupported = false let versionId = null @@ -2404,14 +2403,14 @@ describe('functional tests', function () { step(`putObjectRetention(bucketName, objectName, putOpts)_bucketName:${objRetentionBucket}, objectName:${retentionObjName}`, done => { // Put two versions of the same object. if (isFeatureSupported) { - let expirationDate = new Date() + const expirationDate = new Date() // set expiry to start of next day. expirationDate.setDate(expirationDate.getDate() + 1) expirationDate.setUTCHours(0, 0, 0, 0) // Should be start of the day.(midnight) client.putObjectRetention(objRetentionBucket, retentionObjName, { governanceBypass: true, - mode: "GOVERNANCE", + mode: 'GOVERNANCE', retainUntilDate: expirationDate.toISOString(), versionId: versionId }) @@ -2461,7 +2460,7 @@ describe('functional tests', function () { describe('Bucket Encryption Related APIs', () => { // Isolate the bucket/object for easy debugging and tracking. // this is not supported in gateway mode. - const encBucketName = "minio-js-test-bucket-enc-" + uuid.v4() + const encBucketName = 'minio-js-test-bucket-enc-' + uuid.v4() before((done) => client.makeBucket(encBucketName, '', done)) after((done) => client.removeBucket(encBucketName, done)) @@ -2596,8 +2595,8 @@ describe('functional tests', function () { // Gateway mode does not support this header. let versionId = null describe('Object Legal hold get/set API Test', function () { - const objLegalHoldBucketName = "minio-js-test-legalhold-" + uuid.v4() - const objLegalHoldObjName = "LegalHoldObject" + const objLegalHoldBucketName = 'minio-js-test-legalhold-' + uuid.v4() + const objLegalHoldObjName = 'LegalHoldObject' let isFeatureSupported = false @@ -2643,7 +2642,7 @@ describe('functional tests', function () { step(`setObjectLegalHold(bucketName, objectName, setOpts={})_bucketName:${objLegalHoldBucketName}, objectName:${objLegalHoldObjName}`, done => { if (isFeatureSupported) { - client.setObjectLegalHold(objLegalHoldBucketName, objLegalHoldObjName, {status:"ON", versionId:versionId}, () => { + client.setObjectLegalHold(objLegalHoldBucketName, objLegalHoldObjName, {status:'ON', versionId:versionId}, () => { done() }) } else { @@ -2664,7 +2663,7 @@ describe('functional tests', function () { step(`setObjectLegalHold(bucketName, objectName, setOpts={})_bucketName:${objLegalHoldBucketName}, objectName:${objLegalHoldObjName}`, done => { if (isFeatureSupported) { - client.setObjectLegalHold(objLegalHoldBucketName, objLegalHoldObjName, {status:"OFF", versionId:versionId}, () => { + client.setObjectLegalHold(objLegalHoldBucketName, objLegalHoldObjName, {status:'OFF', versionId:versionId}, () => { done() }) } else { @@ -2710,16 +2709,16 @@ describe('functional tests', function () { describe('Object Name special characters test without Prefix', () => { // Isolate the bucket/object for easy debugging and tracking. - const bucketNameForSpCharObjects = "minio-js-test-obj-spwpre-" + uuid.v4() + const bucketNameForSpCharObjects = 'minio-js-test-obj-spwpre-' + uuid.v4() before((done) => client.makeBucket(bucketNameForSpCharObjects, '', done)) after((done) => client.removeBucket(bucketNameForSpCharObjects, done)) // Reference:: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html // Host OS compatible File name characters/ file names. - let objectNameSpecialChars = "äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 \u0040 amȡȹɆple&0a!-_.*'()&$@=;:+,?<>.pdf" + let objectNameSpecialChars = 'äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 \u0040 amȡȹɆple&0a!-_.*\'()&$@=;:+,?<>.pdf' if (isWindowsPlatform) { - objectNameSpecialChars = "äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 u0040 amȡȹɆple&0a!-_.'()&$@=;+,.pdf" + objectNameSpecialChars = 'äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 u0040 amȡȹɆple&0a!-_.\'()&$@=;+,.pdf' } const objectContents = Buffer.alloc(100 * 1024, 0) @@ -2735,7 +2734,7 @@ describe('functional tests', function () { }) step(`listObjects(bucketName, prefix, recursive)_bucketName:${bucketNameForSpCharObjects}, prefix:"", true`, done => { - const listStream = client.listObjects(bucketNameForSpCharObjects, "", true) + const listStream = client.listObjects(bucketNameForSpCharObjects, '', true) let listedObject = null listStream.on('data', function (obj) { listedObject = obj @@ -2753,7 +2752,7 @@ describe('functional tests', function () { }) step(`listObjectsV2(bucketName, prefix, recursive)_bucketName:${bucketNameForSpCharObjects}, prefix:"", true`, done => { - const listStream = client.listObjectsV2(bucketNameForSpCharObjects, "", true) + const listStream = client.listObjectsV2(bucketNameForSpCharObjects, '', true) let listedObject = null listStream.on('data', function (obj) { listedObject = obj @@ -2771,7 +2770,7 @@ describe('functional tests', function () { }) }) step(`extensions.listObjectsV2WithMetadata(bucketName, prefix, recursive)_bucketName:${bucketNameForSpCharObjects}, prefix:"", true`, done => { - const listStream = client.extensions.listObjectsV2WithMetadata(bucketNameForSpCharObjects, "", true) + const listStream = client.extensions.listObjectsV2WithMetadata(bucketNameForSpCharObjects, '', true) let listedObject = null listStream.on('data', function (obj) { listedObject = obj @@ -2816,16 +2815,16 @@ describe('functional tests', function () { }) describe('Object Name special characters test with a Prefix', () => { // Isolate the bucket/object for easy debugging and tracking. - const bucketNameForSpCharObjects = "minio-js-test-obj-spnpre-" + uuid.v4() + const bucketNameForSpCharObjects = 'minio-js-test-obj-spnpre-' + uuid.v4() before((done) => client.makeBucket(bucketNameForSpCharObjects, '', done)) after((done) => client.removeBucket(bucketNameForSpCharObjects, done)) // Reference:: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html - let objectNameSpecialChars = "äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 \u0040 amȡȹɆple&0a!-_.*'()&$@=;:+,?<>.pdf" + let objectNameSpecialChars = 'äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 \u0040 amȡȹɆple&0a!-_.*\'()&$@=;:+,?<>.pdf' if (isWindowsPlatform) { - objectNameSpecialChars = "äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 u0040 amȡȹɆple&0a!-_.'()&$@=;+,.pdf" + objectNameSpecialChars = 'äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 u0040 amȡȹɆple&0a!-_.\'()&$@=;+,.pdf' } - const prefix = "test" + const prefix = 'test' const objectNameWithPrefixForSpecialChars = `${prefix}/${objectNameSpecialChars}` const objectContents = Buffer.alloc(100 * 1024, 0) @@ -2923,7 +2922,7 @@ describe('functional tests', function () { describe('Assume Role Tests', () => { // Run only in local environment. - const bucketName = "minio-js-test-assume-role" + uuid.v4() + const bucketName = 'minio-js-test-assume-role' + uuid.v4() before((done) => client.makeBucket(bucketName, '', done)) after((done) => client.removeBucket(bucketName, done)) @@ -2931,8 +2930,8 @@ describe('functional tests', function () { const objName = 'datafile-100-kB' const objContent = Buffer.alloc(100 * 1024, 0) - const canRunAssumeRoleTest = clientConfigParams.endPoint.includes("localhost") - const stsEndPoint = "http://localhost:9000" + const canRunAssumeRoleTest = clientConfigParams.endPoint.includes('localhost') + const stsEndPoint = 'http://localhost:9000' try { if (canRunAssumeRoleTest) { @@ -2940,7 +2939,7 @@ describe('functional tests', function () { const assumeRoleProvider = new AssumeRoleProvider({ stsEndpoint: stsEndPoint, accessKey: client.accessKey, - secretKey: client.secretKey, + secretKey: client.secretKey }) const aRoleConf = Object.assign({}, clientConfigParams, {credentialsProvider: assumeRoleProvider}) @@ -2969,14 +2968,14 @@ describe('functional tests', function () { } } catch (err) { // eslint-disable-next-line no-console - console.error("Error in Assume Role API.", err) + console.error('Error in Assume Role API.', err) } }) describe('Put Object Response test with multipart on an Un versioned bucket:', () => { - const bucketToTestMultipart = "minio-js-test-put-multiuv-" + uuid.v4() + const bucketToTestMultipart = 'minio-js-test-put-multiuv-' + uuid.v4() before((done) => client.makeBucket(bucketToTestMultipart, '', done)) after((done) => client.removeBucket(bucketToTestMultipart, done)) @@ -2989,7 +2988,7 @@ describe('functional tests', function () { if (res.versionId === null && res.etag) { done() } - else{ + else { done(new Error(`Incorrect response format, expected: {versionId:null, etag:"some-etag-hash"} received:${JSON.stringify(res)}`)) } }) @@ -3009,7 +3008,7 @@ describe('functional tests', function () { if (res.versionId === null && res.etag) { done() } - else{ + else { done(new Error(`Incorrect response format, expected: {versionId:null, etag:"some-etag-hash"} received:${JSON.stringify(res)}`)) } }) @@ -3023,13 +3022,13 @@ describe('functional tests', function () { describe('Put Object Response test with multipart on Versioned bucket:', () => { - const bucketToTestMultipart = "minio-js-test-put-multiv-" + uuid.v4() + const bucketToTestMultipart = 'minio-js-test-put-multiv-' + uuid.v4() let isVersioningSupported = false let versionedObjectRes = null let versionedMultiPartObjectRes = null before((done) => client.makeBucket(bucketToTestMultipart, '', () => { - client.setBucketVersioning(bucketToTestMultipart, {Status: "Enabled"}, (err) => { + client.setBucketVersioning(bucketToTestMultipart, {Status: 'Enabled'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) isVersioningSupported = true @@ -3098,7 +3097,7 @@ describe('functional tests', function () { } }) }) - describe("Compose Object API Tests", () => { + describe('Compose Object API Tests', () => { /** * Steps: * 1. Generate a 100MB file in temp dir @@ -3110,22 +3109,22 @@ describe('functional tests', function () { * 7. Remove bucket. (Clean up) */ - var _100mbFileToBeSplitAndComposed = Buffer.alloc(100 * 1024 * 1024, 0) - let composeObjectTestBucket = "minio-js-test-compose-obj-" + uuid.v4() + const _100mbFileToBeSplitAndComposed = Buffer.alloc(100 * 1024 * 1024, 0) + const composeObjectTestBucket = 'minio-js-test-compose-obj-' + uuid.v4() before((done) => client.makeBucket(composeObjectTestBucket, '', done)) after((done) => client.removeBucket(composeObjectTestBucket, done)) const composedObjName = '_100-mb-file-to-test-compose' const tmpSubDir = `${tmpDir}/compose` - var fileToSplit = `${tmpSubDir}/${composedObjName}` + const fileToSplit = `${tmpSubDir}/${composedObjName}` let partFilesNamesWithPath = [] - let partObjNameList = [] + const partObjNameList = [] let isSplitSuccess = false - step(`Create a local file of 100 MB and split `, done => { + step('Create a local file of 100 MB and split ', done => { try { fs.writeFileSync(fileToSplit, _100mbFileToBeSplitAndComposed) // 100 MB split into 26 MB part size. - splitFile.splitFileBySize(fileToSplit, (26 * 1024 * 1024)) + splitFile.splitFileBySize(fileToSplit, 26 * 1024 * 1024) .then((names) => { partFilesNamesWithPath = names isSplitSuccess = true @@ -3144,7 +3143,7 @@ describe('functional tests', function () { if (isSplitSuccess) { const fileSysToBucket = partFilesNamesWithPath.map((partFileName) => { - const partObjName = partFileName.substr((tmpSubDir + "/").length) + const partObjName = partFileName.substr((tmpSubDir + '/').length) partObjNameList.push(partObjName) return client.fPutObject(composeObjectTestBucket, partObjName, partFileName, {}) }) @@ -3219,7 +3218,7 @@ describe('functional tests', function () { } }) - step("Clean up temp directory part files", (done) => { + step('Clean up temp directory part files', (done) => { if (isSplitSuccess) { removeDirAndFiles(tmpSubDir) } @@ -3230,15 +3229,15 @@ describe('functional tests', function () { describe('Special Characters test on a prefix and an object', () => { // Isolate the bucket/object for easy debugging and tracking. - const bucketNameForSpCharObjects = "minio-js-test-obj-sppre" + uuid.v4() + const bucketNameForSpCharObjects = 'minio-js-test-obj-sppre' + uuid.v4() before((done) => client.makeBucket(bucketNameForSpCharObjects, '', done)) after((done) => client.removeBucket(bucketNameForSpCharObjects, done)) - const specialCharPrefix = "SpecialMenùäöüexPrefix/" + const specialCharPrefix = 'SpecialMenùäöüexPrefix/' - let objectNameSpecialChars = "äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 \u0040 amȡȹɆple&0a!-_.*'()&$@=;:+,?<>.pdf" + let objectNameSpecialChars = 'äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 \u0040 amȡȹɆple&0a!-_.*\'()&$@=;:+,?<>.pdf' if (isWindowsPlatform) { - objectNameSpecialChars = "äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 u0040 amȡȹɆple&0a!-_.'()&$@=;+,.pdf" + objectNameSpecialChars = 'äöüex ®©µÄÆÐÕæŒƕƩDž 01000000 0x40 u0040 amȡȹɆple&0a!-_.\'()&$@=;+,.pdf' } @@ -3256,7 +3255,7 @@ describe('functional tests', function () { step(`listObjects(bucketName, prefix, recursive)_bucketName:${bucketNameForSpCharObjects}, prefix:"", false`, done => { - const listStream = client.listObjects(bucketNameForSpCharObjects, "", false) + const listStream = client.listObjects(bucketNameForSpCharObjects, '', false) let listedObject = null listStream.on('data', function (obj) { listedObject = obj @@ -3274,7 +3273,7 @@ describe('functional tests', function () { }) step(`listObjectsV2(bucketName, prefix, recursive)_bucketName:${bucketNameForSpCharObjects}, prefix:"", false`, done => { - const listStream = client.listObjectsV2(bucketNameForSpCharObjects, "", false) + const listStream = client.listObjectsV2(bucketNameForSpCharObjects, '', false) let listedObject = null listStream.on('data', function (obj) { listedObject = obj @@ -3294,7 +3293,7 @@ describe('functional tests', function () { }) step(`extensions.listObjectsV2WithMetadata(bucketName, prefix, recursive)_bucketName:${bucketNameForSpCharObjects}, prefix:"", false`, done => { - const listStream = client.extensions.listObjectsV2WithMetadata(bucketNameForSpCharObjects, "", false) + const listStream = client.extensions.listObjectsV2WithMetadata(bucketNameForSpCharObjects, '', false) let listedObject = null listStream.on('data', function (obj) { listedObject = obj @@ -3335,10 +3334,10 @@ describe('functional tests', function () { }) describe('Test listIncompleteUploads (Multipart listing) with special characters', () => { - const specialCharPrefix = "SpecialMenùäöüexPrefix/" - const objectNameSpecialChars = "äöüex.pdf" + const specialCharPrefix = 'SpecialMenùäöüexPrefix/' + const objectNameSpecialChars = 'äöüex.pdf' const spObjWithPrefix = `${specialCharPrefix}${objectNameSpecialChars}` - const spBucketName = "minio-js-test-lin-sppre" + uuid.v4() + const spBucketName = 'minio-js-test-lin-sppre' + uuid.v4() before((done) => client.makeBucket(spBucketName, '', done)) after((done) => client.removeBucket(spBucketName, done)) @@ -3349,13 +3348,13 @@ describe('functional tests', function () { step(`listIncompleteUploads(bucketName, prefix, recursive)_bucketName:${spBucketName}, prefix:${spObjWithPrefix}, recursive: true_`, function (done) { // MinIO's ListIncompleteUploads returns an empty list, so skip this on non-AWS. - let hostSkipList = ['s3.amazonaws.com'] + const hostSkipList = ['s3.amazonaws.com'] if (!hostSkipList.includes(client.host)) { done() return } - var found = false + let found = false client.listIncompleteUploads(spBucketName, spObjWithPrefix, true) .on('error', e => done(e)) .on('data', data => { @@ -3369,14 +3368,14 @@ describe('functional tests', function () { step(`listIncompleteUploads(bucketName, prefix, recursive)_bucketName:${spBucketName}, recursive: true_`, function (done) { // MinIO's ListIncompleteUploads returns an empty list, so skip this on non-AWS. - let hostSkipList = ['s3.amazonaws.com'] + const hostSkipList = ['s3.amazonaws.com'] if (!hostSkipList.includes(client.host)) { done() return } - var found = false - client.listIncompleteUploads(spBucketName, "", false) + let found = false + client.listIncompleteUploads(spBucketName, '', false) .on('error', e => done(e)) .on('data', data => { // check the prefix @@ -3394,22 +3393,22 @@ describe('functional tests', function () { }) }) describe('Select Object content API Test', function () { - const selObjContentBucket = "minio-js-test-sel-object-" + uuid.v4() - const selObject = "SelectObjectContent" + const selObjContentBucket = 'minio-js-test-sel-object-' + uuid.v4() + const selObject = 'SelectObjectContent' // Isolate the bucket/object for easy debugging and tracking. before((done) => client.makeBucket(selObjContentBucket, '', done)) after((done) => client.removeBucket(selObjContentBucket, done)) step(`putObject(bucketName, objectName, stream)_bucketName:${selObjContentBucket}, objectName:${selObject}, stream:csv`, done => { // Save a CSV file so that we can query later to test the results. - client.putObject(selObjContentBucket, selObject, "Name,PhoneNumber,City,Occupation\n" + - "Sam,(949) 123-45567,Irvine,Solutions Architect\n" + - "Vinod,(949) 123-4556,Los Angeles,Solutions Architect\n" + - "Jeff,(949) 123-45567,Seattle,AWS Evangelist\n" + - "Jane,(949) 123-45567,Chicago,Developer\n" + - "Sean,(949) 123-45567,Chicago,Developer\n" + - "Mary,(949) 123-45567,Chicago,Developer\n" + - "Kate,(949) 123-45567,Chicago,Developer", {}) + client.putObject(selObjContentBucket, selObject, 'Name,PhoneNumber,City,Occupation\n' + + 'Sam,(949) 123-45567,Irvine,Solutions Architect\n' + + 'Vinod,(949) 123-4556,Los Angeles,Solutions Architect\n' + + 'Jeff,(949) 123-45567,Seattle,AWS Evangelist\n' + + 'Jane,(949) 123-45567,Chicago,Developer\n' + + 'Sean,(949) 123-45567,Chicago,Developer\n' + + 'Mary,(949) 123-45567,Chicago,Developer\n' + + 'Kate,(949) 123-45567,Chicago,Developer', {}) .then(() => { done() }) @@ -3420,25 +3419,25 @@ describe('functional tests', function () { step(`selectObjectContent(bucketName, objectName, selectOpts)_bucketName:${selObjContentBucket}, objectName:${selObject}`, done => { const selectOpts = { - expression: "SELECT * FROM s3object s where s.\"Name\" = 'Jane'", - expressionType: "SQL", - inputSerialization : {'CSV': {"FileHeaderInfo": "Use", - RecordDelimiter: "\n", - FieldDelimiter: ",", + expression: 'SELECT * FROM s3object s where s."Name" = \'Jane\'', + expressionType: 'SQL', + inputSerialization : {'CSV': {'FileHeaderInfo': 'Use', + RecordDelimiter: '\n', + FieldDelimiter: ',' }, 'CompressionType': 'NONE'}, - outputSerialization : {'CSV': {RecordDelimiter: "\n", - FieldDelimiter: ",",}}, + outputSerialization : {'CSV': {RecordDelimiter: '\n', + FieldDelimiter: ','}}, requestProgress: {Enabled: true} } client.selectObjectContent(selObjContentBucket, selObject, selectOpts) .then((result) => { // verify the select query result string. - if (result.getRecords().toString() === "Jane,(949) 123-45567,Chicago,Developer\n") { // \n for csv line ending. + if (result.getRecords().toString() === 'Jane,(949) 123-45567,Chicago,Developer\n') { // \n for csv line ending. done() } - else{ + else { return done(new Error(`Expected Result did not match received:${result.getRecords().toString()} expected:"Jane,(949) 123-45567,Chicago,Developer\n"`)) } }) @@ -3455,7 +3454,7 @@ describe('functional tests', function () { describe('Force Deletion of objects with versions', function () { // Isolate the bucket/object for easy debugging and tracking. - const fdWithVerBucket = "minio-js-fd-version-" + uuid.v4() + const fdWithVerBucket = 'minio-js-fd-version-' + uuid.v4() const fdObjectName = 'datafile-100-kB' const fdObject = dataDir ? fs.readFileSync(dataDir + '/' + fdObjectName) : Buffer.alloc(100 * 1024, 0) @@ -3466,7 +3465,7 @@ describe('functional tests', function () { let isVersioningSupported = false const objVersionList = [] step(`setBucketVersioning(bucketName, versionConfig):_bucketName:${fdWithVerBucket},versionConfig:{Status:"Enabled"} `, (done) => { - client.setBucketVersioning(fdWithVerBucket, {Status: "Enabled"}, (err) => { + client.setBucketVersioning(fdWithVerBucket, {Status: 'Enabled'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) isVersioningSupported = true @@ -3497,7 +3496,7 @@ describe('functional tests', function () { step(`removeObject(bucketName, objectList, removeOpts)_bucketName:${fdWithVerBucket}_Remove ${objVersionList.length} objects`, done => { if (isVersioningSupported) { - client.removeObject(fdWithVerBucket, fdObjectName,{forceDelete:true}, () => { + client.removeObject(fdWithVerBucket, fdObjectName, {forceDelete:true}, () => { done() }) } else { @@ -3525,7 +3524,7 @@ describe('functional tests', function () { describe('Force Deletion of prefix with versions', function () { // Isolate the bucket/object for easy debugging and tracking. - const fdPrefixBucketName = "minio-js-fd-version-" + uuid.v4() + const fdPrefixBucketName = 'minio-js-fd-version-' + uuid.v4() const fdPrefixObjName = 'my-prefix/datafile-100-kB' const fdPrefixObject = dataDir ? fs.readFileSync(dataDir + '/' + fdPrefixObjName) : Buffer.alloc(100 * 1024, 0) @@ -3537,7 +3536,7 @@ describe('functional tests', function () { let isVersioningSupported = false const objVersionList = [] step(`setBucketVersioning(bucketName, versionConfig):_bucketName:${fdPrefixBucketName},versionConfig:{Status:"Enabled"} `, (done) => { - client.setBucketVersioning(fdPrefixBucketName, {Status: "Enabled"}, (err) => { + client.setBucketVersioning(fdPrefixBucketName, {Status: 'Enabled'}, (err) => { if (err && err.code === 'NotImplemented') return done() if (err) return done(err) isVersioningSupported = true @@ -3568,7 +3567,7 @@ describe('functional tests', function () { step(`removeObject(bucketName, objectList, removeOpts)_bucketName:${fdPrefixBucketName}_Remove ${objVersionList.length} objects`, done => { if (isVersioningSupported) { - client.removeObject(fdPrefixBucketName, "my-prefix/",{forceDelete:true}, () => { + client.removeObject(fdPrefixBucketName, 'my-prefix/', {forceDelete:true}, () => { done() }) } else { @@ -3596,7 +3595,7 @@ describe('functional tests', function () { describe('Force Deletion of objects without versions', function () { // Isolate the bucket/object for easy debugging and tracking. - const versionedBucketName = "minio-js-fd-nv-" + uuid.v4() + const versionedBucketName = 'minio-js-fd-nv-' + uuid.v4() const versioned_100kbObjectName = 'datafile-100-kB' const versioned_100kb_Object = dataDir ? fs.readFileSync(dataDir + '/' + versioned_100kbObjectName) : Buffer.alloc(100 * 1024, 0) @@ -3612,13 +3611,13 @@ describe('functional tests', function () { }) step(`removeObject(bucketName, objectList, removeOpts)_bucketName:${versionedBucketName}_Remove 1 object`, done => { - client.removeObject(versionedBucketName, versioned_100kbObjectName,{forceDelete:true}, () => { + client.removeObject(versionedBucketName, versioned_100kbObjectName, {forceDelete:true}, () => { done() }) }) step(`listObjects(bucketName, prefix, recursive)_bucketName:${versionedBucketName}, prefix: '', recursive:true_`, done => { - let objVersionList=[] + const objVersionList=[] client.listObjects(versionedBucketName, '', true, {}) .on('error', done) .on('end', () => { @@ -3634,7 +3633,7 @@ describe('functional tests', function () { describe('Force Deletion of prefix', function () { // Isolate the bucket/object for easy debugging and tracking. - const fdPrefixBucket = "minio-js-fd-nv-" + uuid.v4() + const fdPrefixBucket = 'minio-js-fd-nv-' + uuid.v4() const fdObjectName = 'my-prefix/datafile-100-kB' const fdObject = dataDir ? fs.readFileSync(dataDir + '/' + fdObjectName) : Buffer.alloc(100 * 1024, 0) @@ -3650,13 +3649,13 @@ describe('functional tests', function () { }) step(`removeObject(bucketName, objectList, removeOpts)_bucketName:${fdPrefixBucket}_Remove 1 object`, done => { - client.removeObject(fdPrefixBucket, "/my-prefix",{forceDelete:true}, () => { + client.removeObject(fdPrefixBucket, '/my-prefix', {forceDelete:true}, () => { done() }) }) step(`listObjects(bucketName, prefix, recursive)_bucketName:${fdPrefixBucket}, prefix: 'my-prefix', recursive:true_`, done => { - let objList=[] + const objList=[] client.listObjects(fdPrefixBucket, 'my-prefix', true, {}) .on('error', done) .on('end', () => { diff --git a/src/test/unit/test.js b/src/test/unit/test.js index c91d3f17..0ad17b4d 100644 --- a/src/test/unit/test.js +++ b/src/test/unit/test.js @@ -14,7 +14,6 @@ * limitations under the License. */ -require('source-map-support').install() import { assert } from 'chai' import Nock from 'nock' @@ -22,14 +21,14 @@ import Stream from 'stream' import * as Minio from '../../../dist/main/minio' import { isValidEndpoint, isValidIP, makeDateLong, - makeDateShort,partsRequired, + makeDateShort, partsRequired, CopySourceOptions, CopyDestinationOptions, isArray, - calculateEvenSplits, + calculateEvenSplits } from '../../../dist/main/helpers' -var Package = require('../../../package.json') +const Package = require('../../../package.json') describe('Helpers', () => { it('should validate for s3 endpoint', () => { @@ -46,12 +45,12 @@ describe('Helpers', () => { }) it('should make date short', () => { - let date = new Date('2012-12-03T17:25:36.331Z') + const date = new Date('2012-12-03T17:25:36.331Z') assert.equal(makeDateShort(date), '20121203') }) it('should make date long', () => { - let date = new Date('2017-08-11T17:26:34.935Z') + const date = new Date('2017-08-11T17:26:34.935Z') assert.equal(makeDateLong(date), '20170811T172634Z') }) @@ -59,7 +58,7 @@ describe('Helpers', () => { // Adopted from minio-go sdk const oneGB =1024 * 1024 * 1024 - const fiveGB = (5*oneGB) + const fiveGB = 5*oneGB const OBJ_SIZES = { gb1 : oneGB, @@ -87,39 +86,39 @@ describe('Helpers', () => { expectedPartsRequiredTestCases.forEach((testCase)=>{ const fnResult = partsRequired(testCase.value) - assert.equal(fnResult,testCase.expected) + assert.equal(fnResult, testCase.expected) }) }) - it("Even split of Sizes Test cases ", ()=>{ + it('Even split of Sizes Test cases ', ()=>{ // Adopted from minio-go sdk const expectedSplitsTestCases =[ {size:0, sourceConfig:new CopySourceOptions({Start: -1}), expectedStart:null, expectedEnd:null} - ,{size:1, sourceConfig:new CopySourceOptions({Start: -1}), expectedStart:[undefined], expectedEnd:[NaN]} - ,{size:1,sourceConfig:new CopySourceOptions({Start: 0}), expectedStart:[0], expectedEnd:[0]} - ,{size:OBJ_SIZES.gb1, sourceConfig:new CopySourceOptions({Start: -1}), expectedStart:[0, 536870912],expectedEnd:[536870911, 1073741823]} - ,{size:OBJ_SIZES.gb5, sourceConfig:new CopySourceOptions({Start: -1}), - expectedStart:[0, 536870912, 1073741824, 1610612736, 2147483648, 2684354560, - 3221225472, 3758096384, 4294967296, 4831838208], - expectedEnd:[536870911, 1073741823, 1610612735, 2147483647, 2684354559, 3221225471, - 3758096383, 4294967295, 4831838207, 5368709119] + , {size:1, sourceConfig:new CopySourceOptions({Start: -1}), expectedStart:[undefined], expectedEnd:[NaN]} + , {size:1, sourceConfig:new CopySourceOptions({Start: 0}), expectedStart:[0], expectedEnd:[0]} + , {size:OBJ_SIZES.gb1, sourceConfig:new CopySourceOptions({Start: -1}), expectedStart:[0, 536870912], expectedEnd:[536870911, 1073741823]} + , {size:OBJ_SIZES.gb5, sourceConfig:new CopySourceOptions({Start: -1}), + expectedStart:[0, 536870912, 1073741824, 1610612736, 2147483648, 2684354560, + 3221225472, 3758096384, 4294967296, 4831838208], + expectedEnd:[536870911, 1073741823, 1610612735, 2147483647, 2684354559, 3221225471, + 3758096383, 4294967295, 4831838207, 5368709119] }, // 2 part splits - {size:OBJ_SIZES.gb5p1, sourceConfig:new CopySourceOptions({Start: -1}), + {size:OBJ_SIZES.gb5p1, sourceConfig:new CopySourceOptions({Start: -1}), expectedStart:[0, 536870913, 1073741825, 1610612737, 2147483649, 2684354561, 3221225473, 3758096385, 4294967297, 4831838209], expectedEnd:[536870912, 1073741824, 1610612736, 2147483648, 2684354560, 3221225472, - 3758096384, 4294967296, 4831838208, 5368709120], + 3758096384, 4294967296, 4831838208, 5368709120] }, - {size:OBJ_SIZES.gb5p1, sourceConfig:new CopySourceOptions({Start: -1}), + {size:OBJ_SIZES.gb5p1, sourceConfig:new CopySourceOptions({Start: -1}), expectedStart:[0, 536870913, 1073741825, 1610612737, 2147483649, 2684354561, 3221225473, 3758096385, 4294967297, 4831838209], expectedEnd:[536870912, 1073741824, 1610612736, 2147483648, 2684354560, 3221225472, - 3758096384, 4294967296, 4831838208, 5368709120], + 3758096384, 4294967296, 4831838208, 5368709120] }, // 3 part splits - {size:OBJ_SIZES.gb10p1,sourceConfig:new CopySourceOptions({Start: -1}), + {size:OBJ_SIZES.gb10p1, sourceConfig:new CopySourceOptions({Start: -1}), expectedStart:[0, 536870913, 1073741825, 1610612737, 2147483649, 2684354561, 3221225473, 3758096385, 4294967297, 4831838209, 5368709121, 5905580033, 6442450945, 6979321857, 7516192769, 8053063681, @@ -127,9 +126,9 @@ describe('Helpers', () => { expectedEnd:[536870912, 1073741824, 1610612736, 2147483648, 2684354560, 3221225472, 3758096384, 4294967296, 4831838208, 5368709120, 5905580032, 6442450944, 6979321856, 7516192768, 8053063680, - 8589934592, 9126805504, 9663676416, 10200547328, 10737418240], + 8589934592, 9126805504, 9663676416, 10200547328, 10737418240] }, - {size:OBJ_SIZES.gb10p2,sourceConfig:new CopySourceOptions({Start: -1}), + {size:OBJ_SIZES.gb10p2, sourceConfig:new CopySourceOptions({Start: -1}), expectedStart:[0, 536870913, 1073741826, 1610612738, 2147483650, 2684354562, 3221225474, 3758096386, 4294967298, 4831838210, 5368709122, 5905580034, 6442450946, 6979321858, 7516192770, 8053063682, @@ -149,10 +148,10 @@ describe('Helpers', () => { endIndex } = fnResult ||{} - if(isArray(startIndex) && isArray(endIndex)) { + if (isArray(startIndex) && isArray(endIndex)) { const isExpectedResult = (startIndex.length === testCase.expectedStart.length) && (endIndex.length === testCase.expectedEnd.length) assert.equal(isExpectedResult, true) - } else{ // null cases. + } else { // null cases. assert.equal(startIndex, expectedSplitsTestCases.expectedStart) assert.equal(endIndex, expectedSplitsTestCases.expectedEnd) } @@ -163,9 +162,9 @@ describe('Helpers', () => { }) describe('CopyConditions', () => { - let date = 'Fri, 11 Aug 2017 19:34:18 GMT' + const date = 'Fri, 11 Aug 2017 19:34:18 GMT' - let cc = new Minio.CopyConditions() + const cc = new Minio.CopyConditions() describe('#setModified', () => { it('should take a date argument', () => { @@ -205,7 +204,7 @@ describe('CopyConditions', () => { }) describe('Client', function() { - var nockRequests = [] + let nockRequests = [] this.timeout(5000) beforeEach(() => { Nock.cleanAll() @@ -218,7 +217,7 @@ describe('Client', function() { } }) }) - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', port: 9000, accessKey: 'accesskey', @@ -227,7 +226,7 @@ describe('Client', function() { }) describe('new client', () => { it('should work with https', () => { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', accessKey: 'accesskey', secretKey: 'secretkey' @@ -235,7 +234,7 @@ describe('Client', function() { assert.equal(client.port, 443) }) it('should override port with http', () => { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', port: 9000, accessKey: 'accesskey', @@ -245,7 +244,7 @@ describe('Client', function() { assert.equal(client.port, 9000) }) it('should work with http', () => { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', accessKey: 'accesskey', secretKey: 'secretkey', @@ -254,7 +253,7 @@ describe('Client', function() { assert.equal(client.port, 80) }) it('should override port with https', () => { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', port: 9000, accessKey: 'accesskey', @@ -337,7 +336,7 @@ describe('Client', function() { describe('presigned-get', () => { it('should not generate presigned url with no access key', (done) => { try { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', port: 9000, useSSL: false @@ -358,7 +357,7 @@ describe('Client', function() { describe('presigned-put', () => { it('should not generate presigned url with no access key', (done) => { try { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', port: 9000, useSSL: false @@ -379,31 +378,31 @@ describe('Client', function() { describe('presigned-post-policy', () => { it('should not generate content type for undefined value', () => { assert.throws(() => { - var policy = client.newPostPolicy() + const policy = client.newPostPolicy() policy.setContentType() }, /content-type cannot be null/) }) it('should not generate content disposition for undefined value', () => { assert.throws(() => { - var policy = client.newPostPolicy() + const policy = client.newPostPolicy() policy.setContentDisposition() }, /content-disposition cannot be null/) }) it('should not generate user defined metadata for string value', () => { assert.throws(() => { - var policy = client.newPostPolicy() + const policy = client.newPostPolicy() policy.setUserMetaData('123') }, /metadata should be of type "object"/) }) it('should not generate user defined metadata for null value', () => { assert.throws(() => { - var policy = client.newPostPolicy() + const policy = client.newPostPolicy() policy.setUserMetaData(null) }, /metadata should be of type "object"/) }) it('should not generate user defined metadata for undefined value', () => { assert.throws(() => { - var policy = client.newPostPolicy() + const policy = client.newPostPolicy() policy.setUserMetaData() }, /metadata should be of type "object"/) }) @@ -411,7 +410,7 @@ describe('Client', function() { }) describe('User Agent', () => { it('should have a default user agent', () => { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', accessKey: 'accesskey', secretKey: 'secretkey' @@ -420,7 +419,7 @@ describe('Client', function() { client.userAgent) }) it('should set user agent', () => { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', accessKey: 'accesskey', secretKey: 'secretkey' @@ -430,7 +429,7 @@ describe('Client', function() { client.userAgent) }) it('should set user agent without comments', () => { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', accessKey: 'accesskey', secretKey: 'secretkey' @@ -441,7 +440,7 @@ describe('Client', function() { }) it('should not set user agent without name', (done) => { try { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', accessKey: 'accesskey', secretKey: 'secretkey' @@ -453,7 +452,7 @@ describe('Client', function() { }) it('should not set user agent with empty name', (done) => { try { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', accessKey: 'accesskey', secretKey: 'secretkey' @@ -465,7 +464,7 @@ describe('Client', function() { }) it('should not set user agent without version', (done) => { try { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', accessKey: 'accesskey', secretKey: 'secretkey' @@ -477,7 +476,7 @@ describe('Client', function() { }) it('should not set user agent with empty version', (done) => { try { - var client = new Minio.Client({ + const client = new Minio.Client({ endPoint: 'localhost', accessKey: 'accesskey', secretKey: 'secretkey' @@ -531,7 +530,7 @@ describe('Client', function() { describe('#putObject(bucket, object, source, size, contentType, callback)', () => { describe('with small objects using single put', () => { it('should fail when data is smaller than specified', (done) => { - var s = new Stream.Readable() + const s = new Stream.Readable() s._read = function() {} s.push('hello world') s.push(null) @@ -542,7 +541,7 @@ describe('Client', function() { }) }) it('should fail when data is larger than specified', (done) => { - var s = new Stream.Readable() + const s = new Stream.Readable() s._read = function() {} s.push('hello world') s.push(null) @@ -749,7 +748,7 @@ describe('Client', function() { // Versioning related options as removeOpts it('should fail on empty (null) removeOpts object', (done) => { try { - client.removeObject('hello', 'testRemoveOpts',null, function() {}) + client.removeObject('hello', 'testRemoveOpts', null, function() {}) } catch (e) { done() } @@ -757,7 +756,7 @@ describe('Client', function() { it('should fail on empty (string) removeOpts', (done) => { try { - client.removeObject('hello', 'testRemoveOpts','', function() {}) + client.removeObject('hello', 'testRemoveOpts', '', function() {}) } catch (e) { done() } @@ -826,7 +825,7 @@ describe('Client', function() { describe('setBucketVersioning(bucket, versionConfig, callback)', () => { it('should fail on null bucket', (done) => { try { - client.setBucketVersioning(null, {},function () { + client.setBucketVersioning(null, {}, function () { }) } catch (e) { done() @@ -834,7 +833,7 @@ describe('Client', function() { }) it('should fail on empty bucket', (done) => { try { - client.setBucketVersioning('', {},function () { + client.setBucketVersioning('', {}, function () { }) } catch (e) { done() @@ -843,7 +842,7 @@ describe('Client', function() { it('should fail on empty versionConfig', (done) => { try { - client.setBucketVersioning('', null,function () { + client.setBucketVersioning('', null, function () { }) } catch (e) { done() @@ -873,7 +872,7 @@ describe('Client', function() { }) it('should fail if tags are more than 50', (done) => { const _50_plus_key_tags={} - for(let i=0;i<51;i+=1){ + for (let i=0; i<51; i+=1) { _50_plus_key_tags[i]=i } try { @@ -888,7 +887,7 @@ describe('Client', function() { describe('Get Bucket Tags', () => { it('should fail on invalid bucket', (done) => { try { - client.getBucketTagging('nv',null, function () { + client.getBucketTagging('nv', null, function () { }) } catch (e) { done() @@ -924,7 +923,7 @@ describe('Client', function() { }) it('should fail on empty bucket', (done) => { try { - client.removeBucketTagging('', function () { + client.removeBucketTagging('', function () { }) } catch (e) { done() @@ -951,7 +950,7 @@ describe('Client', function() { describe('Put Object Tags', () => { it('should fail on null object', (done) => { try { - client.putObjectTagging('my-bucket-name',null, {}, function () { + client.putObjectTagging('my-bucket-name', null, {}, function () { }) } catch (e) { done() @@ -959,7 +958,7 @@ describe('Client', function() { }) it('should fail on empty object', (done) => { try { - client.putObjectTagging('my-bucket-name',null, {}, function () { + client.putObjectTagging('my-bucket-name', null, {}, function () { }) } catch (e) { done() @@ -967,7 +966,7 @@ describe('Client', function() { }) it('should fail on non object tags', (done) => { try { - client.putObjectTagging('my-bucket-name',null, 'non-obj-tag', function () { + client.putObjectTagging('my-bucket-name', null, 'non-obj-tag', function () { }) } catch (e) { done() @@ -975,11 +974,11 @@ describe('Client', function() { }) it('should fail if tags are more than 50 on an object', (done) => { const _50_plus_key_tags={} - for(let i=0;i<51;i+=1){ + for (let i=0; i<51; i+=1) { _50_plus_key_tags[i]=i } try { - client.putObjectTagging('my-bucket-name',null, _50_plus_key_tags, function () { + client.putObjectTagging('my-bucket-name', null, _50_plus_key_tags, function () { }) } catch (e) { done() @@ -990,7 +989,7 @@ describe('Client', function() { describe('Get Object Tags', () => { it('should fail on invalid bucket', (done) => { try { - client.getObjectTagging('nv',null, function () { + client.getObjectTagging('nv', null, function () { }) } catch (e) { done() @@ -998,7 +997,7 @@ describe('Client', function() { }) it('should fail on null object', (done) => { try { - client.getObjectTagging('my-bucket-name',null, function () { + client.getObjectTagging('my-bucket-name', null, function () { }) } catch (e) { done() @@ -1006,7 +1005,7 @@ describe('Client', function() { }) it('should fail on empty object', (done) => { try { - client.getObjectTagging('my-bucket-name',null, function () { + client.getObjectTagging('my-bucket-name', null, function () { }) } catch (e) { done() @@ -1018,7 +1017,7 @@ describe('Client', function() { describe('Remove Object Tags', () => { it('should fail on null object', (done) => { try { - client.removeObjectTagging('my-bucket',null, function () { + client.removeObjectTagging('my-bucket', null, function () { }) } catch (e) { done() @@ -1026,7 +1025,7 @@ describe('Client', function() { }) it('should fail on empty bucket', (done) => { try { - client.removeObjectTagging('my-bucket', '', function () { + client.removeObjectTagging('my-bucket', '', function () { }) } catch (e) { done() @@ -1056,7 +1055,7 @@ describe('Client', function() { describe('setBucketLifecycle(bucket, lifecycleConfig, callback)', () => { it('should fail on null bucket', (done) => { try { - client.setBucketLifecycle(null, null,function () { + client.setBucketLifecycle(null, null, function () { }) } catch (e) { done() @@ -1065,7 +1064,7 @@ describe('Client', function() { it('should fail on empty bucket', (done) => { try { - client.setBucketLifecycle('', null,function () { + client.setBucketLifecycle('', null, function () { }) } catch (e) { done() @@ -1097,7 +1096,7 @@ describe('Client', function() { describe('removeBucketLifecycle(bucket, callback)', () => { it('should fail on null bucket', (done) => { try { - client.removeBucketLifecycle(null, null,function () { + client.removeBucketLifecycle(null, null, function () { }) } catch (e) { done() @@ -1106,7 +1105,7 @@ describe('Client', function() { it('should fail on empty bucket', (done) => { try { - client.removeBucketLifecycle('', null,function () { + client.removeBucketLifecycle('', null, function () { }) } catch (e) { done() @@ -1154,7 +1153,7 @@ describe('Client', function() { }) it('should fail on passing invalid mode ', (done) => { try { - client.setObjectLockConfig('my-bucket',{mode:"invalid_mode"}, function () { + client.setObjectLockConfig('my-bucket', {mode:'invalid_mode'}, function () { }) } catch (e) { done() @@ -1162,7 +1161,7 @@ describe('Client', function() { }) it('should fail on passing invalid unit ', (done) => { try { - client.setObjectLockConfig('my-bucket',{ mode:"COMPLIANCE",unit:"invalid_unit"}, function () { + client.setObjectLockConfig('my-bucket', { mode:'COMPLIANCE', unit:'invalid_unit'}, function () { }) } catch (e) { done() @@ -1170,7 +1169,7 @@ describe('Client', function() { }) it('should fail on passing invalid validity ', (done) => { try { - client.setObjectLockConfig('my-bucket',{mode:"COMPLIANCE",unit:"invalid_unit", validity:''}, function () { + client.setObjectLockConfig('my-bucket', {mode:'COMPLIANCE', unit:'invalid_unit', validity:''}, function () { }) } catch (e) { done() @@ -1178,7 +1177,7 @@ describe('Client', function() { }) it('should fail on passing invalid config ', (done) => { try { - client.setObjectLockConfig('my-bucket',{mode:"COMPLIANCE", randomProp:true, nonExisting:false,}, function () { + client.setObjectLockConfig('my-bucket', {mode:'COMPLIANCE', randomProp:true, nonExisting:false}, function () { }) } catch (e) { done() @@ -1191,7 +1190,7 @@ describe('Client', function() { describe('getObjectRetention(bucket, objectName, getRetentionOpts,callback)', () => { it('should fail on null bucket', (done) => { try { - client.getObjectRetention(null,'','', function () { + client.getObjectRetention(null, '', '', function () { }) } catch (e) { done() @@ -1199,7 +1198,7 @@ describe('Client', function() { }) it('should fail on empty bucket', (done) => { try { - client.getObjectRetention('', '','',function () { + client.getObjectRetention('', '', '', function () { }) } catch (e) { done() @@ -1207,7 +1206,7 @@ describe('Client', function() { }) it('should fail on invalid object name', (done) => { try { - client.getObjectRetention('my-bucket', null, '',function () { + client.getObjectRetention('my-bucket', null, '', function () { }) } catch (e) { done() @@ -1215,7 +1214,7 @@ describe('Client', function() { }) it('should fail on invalid versionId', (done) => { try { - client.getObjectRetention('my-bucket', 'objectname', {versionId:123},function () { + client.getObjectRetention('my-bucket', 'objectname', {versionId:123}, function () { }) } catch (e) { done() @@ -1226,7 +1225,7 @@ describe('Client', function() { describe('putObjectRetention(bucket, objectName, retentionConfig, callback)', () => { it('should fail on null bucket', (done) => { try { - client.putObjectRetention(null,'',{}, function () { + client.putObjectRetention(null, '', {}, function () { }) } catch (e) { done() @@ -1234,7 +1233,7 @@ describe('Client', function() { }) it('should fail on empty bucket', (done) => { try { - client.putObjectRetention('','',{}, function () { + client.putObjectRetention('', '', {}, function () { }) } catch (e) { done() @@ -1243,7 +1242,7 @@ describe('Client', function() { it('should fail on null object', (done) => { try { - client.putObjectRetention('my-bucket',null,{}, function () { + client.putObjectRetention('my-bucket', null, {}, function () { }) } catch (e) { done() @@ -1259,7 +1258,7 @@ describe('Client', function() { }) it('should fail on passing invalid mode ', (done) => { try { - client.putObjectRetention('my-bucket', 'my-object', {mode:"invalid_mode"}, function () { + client.putObjectRetention('my-bucket', 'my-object', {mode:'invalid_mode'}, function () { }) } catch (e) { done() @@ -1267,7 +1266,7 @@ describe('Client', function() { }) it('should fail on passing invalid governanceBypass ', (done) => { try { - client.putObjectRetention('my-bucket', 'my-object', { governanceBypass:"nonbool"}, function () { + client.putObjectRetention('my-bucket', 'my-object', { governanceBypass:'nonbool'}, function () { }) } catch (e) { done() @@ -1283,7 +1282,7 @@ describe('Client', function() { }) it('should fail on passing invalid versionId ', (done) => { try { - client.putObjectRetention('my-bucket',{ versionId:"COMPLIANCE" }, function () { + client.putObjectRetention('my-bucket', { versionId:'COMPLIANCE' }, function () { }) } catch (e) { done() @@ -1319,17 +1318,17 @@ describe('Client', function() { Rule:[ { ApplyServerSideEncryptionByDefault: { - SSEAlgorithm:"AES256" + SSEAlgorithm:'AES256' } }, { ApplyServerSideEncryptionByDefault: { - SSEAlgorithm:"AES256" + SSEAlgorithm:'AES256' } } ] - },function () { + }, function () { }) } catch (e) { done() @@ -1425,7 +1424,7 @@ describe('Client', function() { it('should fail on empty value for replicationConfig rules', (done) => { try { - client.setBucketReplication('my-bucket', {role:"arn:",rules:[]}, function () { + client.setBucketReplication('my-bucket', {role:'arn:', rules:[]}, function () { }) } catch (e) { done() @@ -1433,7 +1432,7 @@ describe('Client', function() { }) it('should fail on null value for replicationConfig rules', (done) => { try { - client.setBucketReplication('my-bucket', {role:"arn:",rules:null}, function () { + client.setBucketReplication('my-bucket', {role:'arn:', rules:null}, function () { }) } catch (e) { done() @@ -1453,7 +1452,7 @@ describe('Client', function() { }) it('should fail on empty bucket', (done) => { try { - client.getBucketReplication('', {},function () { + client.getBucketReplication('', {}, function () { }) } catch (e) { done() @@ -1472,7 +1471,7 @@ describe('Client', function() { }) it('should fail on empty bucket', (done) => { try { - client.removeBucketReplication('', {},function () { + client.removeBucketReplication('', {}, function () { }) } catch (e) { done() @@ -1511,7 +1510,7 @@ describe('Client', function() { }) it('should fail on null getOpts', (done) => { try { - client.getObjectLegalHold('my-bucker', 'my-object', null, function () { + client.getObjectLegalHold('my-bucker', 'my-object', null, function () { }) } catch (e) { done() @@ -1547,7 +1546,7 @@ describe('Client', function() { }) it('should fail on null setOpts', (done) => { try { - client.setObjectLegalHold('my-bucker', 'my-object', null, function () { + client.setObjectLegalHold('my-bucker', 'my-object', null, function () { }) } catch (e) { done() @@ -1618,7 +1617,7 @@ describe('Client', function() { it('should fail on empty object', (done) => { try { - client.selectObjectContent('my-bucket','', function () { + client.selectObjectContent('my-bucket', '', function () { }) } catch (e) { done() @@ -1626,7 +1625,7 @@ describe('Client', function() { }) it('should fail on null object', (done) => { try { - client.selectObjectContent('my-bucket',null, function () { + client.selectObjectContent('my-bucket', null, function () { }) } catch (e) { done() @@ -1653,7 +1652,7 @@ describe('IP Address Validations', ()=>{ }) it('Check list of IPV4 Valid addresses', () => { - const validIpv4 =['001.002.003.004', '127.0.0.1', '255.255.255.255','192.168.1.10'] + const validIpv4 =['001.002.003.004', '127.0.0.1', '255.255.255.255', '192.168.1.10'] validIpv4.map(ip=>{ assert.equal(isValidIP(ip), true) }) @@ -1662,500 +1661,500 @@ describe('IP Address Validations', ()=>{ it('Check list of IPV6 Invalid addresses', () => { const invalidIpV6 =[ - "':10.0.0.1", - "-1", - "::1 ::1", - "1.2.3.4:1111:2222:3333:4444::5555", - "1.2.3.4:1111:2222:3333::5555", - "1.2.3.4:1111:2222::5555", - "1.2.3.4:1111::5555", - "1.2.3.4::", - "1.2.3.4::5555", - "11112222:3333:4444:5555:6666:1.2.3.4", - "11112222:3333:4444:5555:6666:7777:8888", - "::1//64", - "::1/0001", - "1111:", - "1111:1.2.3.4", - "1111:2222", - "1111:22223333:4444:5555:6666:1.2.3.4", - "1111:22223333:4444:5555:6666:7777:8888", - "1111:2222:", - "1111:2222:1.2.3.4", - "1111:2222:3333", - "1111:2222:33334444:5555:6666:1.2.3.4", - "1111:2222:33334444:5555:6666:7777:8888", - "1111:2222:3333:", - "1111:2222:3333:1.2.3.4", - "1111:2222:3333:4444", - "1111:2222:3333:44445555:6666:1.2.3.4", - "1111:2222:3333:44445555:6666:7777:8888", - "1111:2222:3333:4444:", - "1111:2222:3333:4444:1.2.3.4", - "1111:2222:3333:4444:5555", - "1111:2222:3333:4444:55556666:1.2.3.4", - "1111:2222:3333:4444:55556666:7777:8888", - "1111:2222:3333:4444:5555:", - "1111:2222:3333:4444:5555:1.2.3.4", - "1111:2222:3333:4444:5555:6666", - "1111:2222:3333:4444:5555:66661.2.3.4", - "1111:2222:3333:4444:5555:66667777:8888", - "1111:2222:3333:4444:5555:6666:", - "1111:2222:3333:4444:5555:6666:1.2.3.4.5", - "1111:2222:3333:4444:5555:6666:255.255.255255", - "1111:2222:3333:4444:5555:6666:255.255255.255", - "1111:2222:3333:4444:5555:6666:255255.255.255", - "1111:2222:3333:4444:5555:6666:256.256.256.256", - "1111:2222:3333:4444:5555:6666:7777", - "1111:2222:3333:4444:5555:6666:77778888", - "1111:2222:3333:4444:5555:6666:7777:", - "1111:2222:3333:4444:5555:6666:7777:1.2.3.4", - "1111:2222:3333:4444:5555:6666:7777:::", - "1111:2222:3333:4444:5555:6666::8888:", - "1111:2222:3333:4444:5555:6666:::", - "1111:2222:3333:4444:5555:6666:::8888", - "1111:2222:3333:4444:5555::7777:8888:", - "1111:2222:3333:4444:5555::7777::", - "1111:2222:3333:4444:5555::8888:", - "1111:2222:3333:4444:5555:::", - "1111:2222:3333:4444:5555:::1.2.3.4", - "1111:2222:3333:4444:5555:::7777:8888", - "1111:2222:3333:4444::5555:", - "1111:2222:3333:4444::6666:7777:8888:", - "1111:2222:3333:4444::6666:7777::", - "1111:2222:3333:4444::6666::8888", - "1111:2222:3333:4444::7777:8888:", - "1111:2222:3333:4444::8888:", - "1111:2222:3333:4444:::", - "1111:2222:3333:4444:::6666:1.2.3.4", - "1111:2222:3333:4444:::6666:7777:8888", - "1111:2222:3333::5555:", - "1111:2222:3333::5555:6666:7777:8888:", - "1111:2222:3333::5555:6666:7777::", - "1111:2222:3333::5555:6666::8888", - "1111:2222:3333::5555::1.2.3.4", - "1111:2222:3333::5555::7777:8888", - "1111:2222:3333::6666:7777:8888:", - "1111:2222:3333::7777:8888:", - "1111:2222:3333::8888:", - "1111:2222:3333:::", - "1111:2222:3333:::5555:6666:1.2.3.4", - "1111:2222:3333:::5555:6666:7777:8888", - "1111:2222::4444:5555:6666:7777:8888:", - "1111:2222::4444:5555:6666:7777::", - "1111:2222::4444:5555:6666::8888", - "1111:2222::4444:5555::1.2.3.4", - "1111:2222::4444:5555::7777:8888", - "1111:2222::4444::6666:1.2.3.4", - "1111:2222::4444::6666:7777:8888", - "1111:2222::5555:", - "1111:2222::5555:6666:7777:8888:", - "1111:2222::6666:7777:8888:", - "1111:2222::7777:8888:", - "1111:2222::8888:", - "1111:2222:::", - "1111:2222:::4444:5555:6666:1.2.3.4", - "1111:2222:::4444:5555:6666:7777:8888", - "1111::3333:4444:5555:6666:7777:8888:", - "1111::3333:4444:5555:6666:7777::", - "1111::3333:4444:5555:6666::8888", - "1111::3333:4444:5555::1.2.3.4", - "1111::3333:4444:5555::7777:8888", - "1111::3333:4444::6666:1.2.3.4", - "1111::3333:4444::6666:7777:8888", - "1111::3333::5555:6666:1.2.3.4", - "1111::3333::5555:6666:7777:8888", - "1111::4444:5555:6666:7777:8888:", - "1111::5555:", - "1111::5555:6666:7777:8888:", - "1111::6666:7777:8888:", - "1111::7777:8888:", - "1111::8888:", - "1111:::", - "1111:::3333:4444:5555:6666:1.2.3.4", - "1111:::3333:4444:5555:6666:7777:8888", - "12345::6:7:8", - "124.15.6.89/60", - "1:2:3:4:5:6:7:8:9", - "1:2:3::4:5:6:7:8:9", - "1:2:3::4:5::7:8", - "1::1.2.256.4", - "1::1.2.3.256", - "1::1.2.3.300", - "1::1.2.3.900", - "1::1.2.300.4", - "1::1.2.900.4", - "1::1.256.3.4", - "1::1.300.3.4", - "1::1.900.3.4", - "1::256.2.3.4", - "1::260.2.3.4", - "1::2::3", - "1::300.2.3.4", - "1::300.300.300.300", - "1::3000.30.30.30", - "1::400.2.3.4", - "1::5:1.2.256.4", - "1::5:1.2.3.256", - "1::5:1.2.3.300", - "1::5:1.2.3.900", - "1::5:1.2.300.4", - "1::5:1.2.900.4", - "1::5:1.256.3.4", - "1::5:1.300.3.4", - "1::5:1.900.3.4", - "1::5:256.2.3.4", - "1::5:260.2.3.4", - "1::5:300.2.3.4", - "1::5:300.300.300.300", - "1::5:3000.30.30.30", - "1::5:400.2.3.4", - "1::5:900.2.3.4", - "1::900.2.3.4", - "1:::3:4:5", - "2001:0000:1234: 0000:0000:C1C0:ABCD:0876", - "2001:0000:1234:0000:0000:C1C0:ABCD:0876 0", - "2001:1:1:1:1:1:255Z255X255Y255", - "2001::FFD3::57ab", - "2001:DB8:0:0:8:800:200C:417A:221", - "2001:db8:85a3::8a2e:37023:7334", - "2001:db8:85a3::8a2e:370k:7334", - "3ffe:0b00:0000:0001:0000:0000:000a", - "3ffe:b00::1::a", - ":", - ":1.2.3.4", - ":1111:2222:3333:4444:5555:6666:1.2.3.4", - ":1111:2222:3333:4444:5555:6666:7777:8888", - ":1111:2222:3333:4444:5555:6666:7777::", - ":1111:2222:3333:4444:5555:6666::", - ":1111:2222:3333:4444:5555:6666::8888", - ":1111:2222:3333:4444:5555::", - ":1111:2222:3333:4444:5555::1.2.3.4", - ":1111:2222:3333:4444:5555::7777:8888", - ":1111:2222:3333:4444:5555::8888", - ":1111:2222:3333:4444::", - ":1111:2222:3333:4444::1.2.3.4", - ":1111:2222:3333:4444::5555", - ":1111:2222:3333:4444::6666:1.2.3.4", - ":1111:2222:3333:4444::6666:7777:8888", - ":1111:2222:3333:4444::7777:8888", - ":1111:2222:3333:4444::8888", - ":1111:2222:3333::", - ":1111:2222:3333::1.2.3.4", - ":1111:2222:3333::5555", - ":1111:2222:3333::5555:6666:1.2.3.4", - ":1111:2222:3333::5555:6666:7777:8888", - ":1111:2222:3333::6666:1.2.3.4", - ":1111:2222:3333::6666:7777:8888", - ":1111:2222:3333::7777:8888", - ":1111:2222:3333::8888", - ":1111:2222::", - ":1111:2222::1.2.3.4", - ":1111:2222::4444:5555:6666:1.2.3.4", - ":1111:2222::4444:5555:6666:7777:8888", - ":1111:2222::5555", - ":1111:2222::5555:6666:1.2.3.4", - ":1111:2222::5555:6666:7777:8888", - ":1111:2222::6666:1.2.3.4", - ":1111:2222::6666:7777:8888", - ":1111:2222::7777:8888", - ":1111:2222::8888", - ":1111::", - ":1111::1.2.3.4", - ":1111::3333:4444:5555:6666:1.2.3.4", - ":1111::3333:4444:5555:6666:7777:8888", - ":1111::4444:5555:6666:1.2.3.4", - ":1111::4444:5555:6666:7777:8888", - ":1111::5555", - ":1111::5555:6666:1.2.3.4", - ":1111::5555:6666:7777:8888", - ":1111::6666:1.2.3.4", - ":1111::6666:7777:8888", - ":1111::7777:8888", - ":1111::8888", - ":2222:3333:4444:5555:6666:1.2.3.4", - ":2222:3333:4444:5555:6666:7777:8888", - ":3333:4444:5555:6666:1.2.3.4", - ":3333:4444:5555:6666:7777:8888", - ":4444:5555:6666:1.2.3.4", - ":4444:5555:6666:7777:8888", - ":5555:6666:1.2.3.4", - ":5555:6666:7777:8888", - ":6666:1.2.3.4", - ":6666:7777:8888", - ":7777:8888", - ":8888", - "::-1", - "::.", - "::..", - "::...", - "::...4", - "::..3.", - "::..3.4", - "::.2..", - "::.2.3.", - "::.2.3.4", - "::1...", - "::1.2..", - "::1.2.256.4", - "::1.2.3.", - "::1.2.3.256", - "::1.2.3.300", - "::1.2.3.900", - "::1.2.300.4", - "::1.2.900.4", - "::1.256.3.4", - "::1.300.3.4", - "::1.900.3.4", - "::1111:2222:3333:4444:5555:6666::", - "::2222:3333:4444:5555:6666:7777:8888:", - "::2222:3333:4444:5555:7777:8888::", - "::2222:3333:4444:5555:7777::8888", - "::2222:3333:4444:5555::1.2.3.4", - "::2222:3333:4444:5555::7777:8888", - "::2222:3333:4444::6666:1.2.3.4", - "::2222:3333:4444::6666:7777:8888", - "::2222:3333::5555:6666:1.2.3.4", - "::2222:3333::5555:6666:7777:8888", - "::2222::4444:5555:6666:1.2.3.4", - "::2222::4444:5555:6666:7777:8888", - "::256.2.3.4", - "::260.2.3.4", - "::300.2.3.4", - "::300.300.300.300", - "::3000.30.30.30", - "::3333:4444:5555:6666:7777:8888:", - "::400.2.3.4", - "::4444:5555:6666:7777:8888:", - "::5555:", - "::5555:6666:7777:8888:", - "::6666:7777:8888:", - "::7777:8888:", - "::8888:", - "::900.2.3.4", - ":::", - ":::1.2.3.4", - ":::2222:3333:4444:5555:6666:1.2.3.4", - ":::2222:3333:4444:5555:6666:7777:8888", - ":::3333:4444:5555:6666:7777:8888", - ":::4444:5555:6666:1.2.3.4", - ":::4444:5555:6666:7777:8888", - ":::5555", - ":::5555:6666:1.2.3.4", - ":::5555:6666:7777:8888", - ":::6666:1.2.3.4", - ":::6666:7777:8888", - ":::7777:8888", - ":::8888", - "::ffff:192x168.1.26", - "::ffff:2.3.4", - "::ffff:257.1.2.3", - "FF01::101::2", - "FF02:0000:0000:0000:0000:0000:0000:0000:0001", - "XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:1.2.3.4", - "XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX", - "a::b::c", - "a::g", - "a:a:a:a:a:a:a:a:a", - "a:aaaaa::", - "a:b", - "a:b:c:d:e:f:g:0", - "ffff:", - "ffff::ffff::ffff", - "ffgg:ffff:ffff:ffff:ffff:ffff:ffff:ffff", - "ldkfj", - "::/129", - "1000:://32", - "::/" + '\':10.0.0.1', + '-1', + '::1 ::1', + '1.2.3.4:1111:2222:3333:4444::5555', + '1.2.3.4:1111:2222:3333::5555', + '1.2.3.4:1111:2222::5555', + '1.2.3.4:1111::5555', + '1.2.3.4::', + '1.2.3.4::5555', + '11112222:3333:4444:5555:6666:1.2.3.4', + '11112222:3333:4444:5555:6666:7777:8888', + '::1//64', + '::1/0001', + '1111:', + '1111:1.2.3.4', + '1111:2222', + '1111:22223333:4444:5555:6666:1.2.3.4', + '1111:22223333:4444:5555:6666:7777:8888', + '1111:2222:', + '1111:2222:1.2.3.4', + '1111:2222:3333', + '1111:2222:33334444:5555:6666:1.2.3.4', + '1111:2222:33334444:5555:6666:7777:8888', + '1111:2222:3333:', + '1111:2222:3333:1.2.3.4', + '1111:2222:3333:4444', + '1111:2222:3333:44445555:6666:1.2.3.4', + '1111:2222:3333:44445555:6666:7777:8888', + '1111:2222:3333:4444:', + '1111:2222:3333:4444:1.2.3.4', + '1111:2222:3333:4444:5555', + '1111:2222:3333:4444:55556666:1.2.3.4', + '1111:2222:3333:4444:55556666:7777:8888', + '1111:2222:3333:4444:5555:', + '1111:2222:3333:4444:5555:1.2.3.4', + '1111:2222:3333:4444:5555:6666', + '1111:2222:3333:4444:5555:66661.2.3.4', + '1111:2222:3333:4444:5555:66667777:8888', + '1111:2222:3333:4444:5555:6666:', + '1111:2222:3333:4444:5555:6666:1.2.3.4.5', + '1111:2222:3333:4444:5555:6666:255.255.255255', + '1111:2222:3333:4444:5555:6666:255.255255.255', + '1111:2222:3333:4444:5555:6666:255255.255.255', + '1111:2222:3333:4444:5555:6666:256.256.256.256', + '1111:2222:3333:4444:5555:6666:7777', + '1111:2222:3333:4444:5555:6666:77778888', + '1111:2222:3333:4444:5555:6666:7777:', + '1111:2222:3333:4444:5555:6666:7777:1.2.3.4', + '1111:2222:3333:4444:5555:6666:7777:::', + '1111:2222:3333:4444:5555:6666::8888:', + '1111:2222:3333:4444:5555:6666:::', + '1111:2222:3333:4444:5555:6666:::8888', + '1111:2222:3333:4444:5555::7777:8888:', + '1111:2222:3333:4444:5555::7777::', + '1111:2222:3333:4444:5555::8888:', + '1111:2222:3333:4444:5555:::', + '1111:2222:3333:4444:5555:::1.2.3.4', + '1111:2222:3333:4444:5555:::7777:8888', + '1111:2222:3333:4444::5555:', + '1111:2222:3333:4444::6666:7777:8888:', + '1111:2222:3333:4444::6666:7777::', + '1111:2222:3333:4444::6666::8888', + '1111:2222:3333:4444::7777:8888:', + '1111:2222:3333:4444::8888:', + '1111:2222:3333:4444:::', + '1111:2222:3333:4444:::6666:1.2.3.4', + '1111:2222:3333:4444:::6666:7777:8888', + '1111:2222:3333::5555:', + '1111:2222:3333::5555:6666:7777:8888:', + '1111:2222:3333::5555:6666:7777::', + '1111:2222:3333::5555:6666::8888', + '1111:2222:3333::5555::1.2.3.4', + '1111:2222:3333::5555::7777:8888', + '1111:2222:3333::6666:7777:8888:', + '1111:2222:3333::7777:8888:', + '1111:2222:3333::8888:', + '1111:2222:3333:::', + '1111:2222:3333:::5555:6666:1.2.3.4', + '1111:2222:3333:::5555:6666:7777:8888', + '1111:2222::4444:5555:6666:7777:8888:', + '1111:2222::4444:5555:6666:7777::', + '1111:2222::4444:5555:6666::8888', + '1111:2222::4444:5555::1.2.3.4', + '1111:2222::4444:5555::7777:8888', + '1111:2222::4444::6666:1.2.3.4', + '1111:2222::4444::6666:7777:8888', + '1111:2222::5555:', + '1111:2222::5555:6666:7777:8888:', + '1111:2222::6666:7777:8888:', + '1111:2222::7777:8888:', + '1111:2222::8888:', + '1111:2222:::', + '1111:2222:::4444:5555:6666:1.2.3.4', + '1111:2222:::4444:5555:6666:7777:8888', + '1111::3333:4444:5555:6666:7777:8888:', + '1111::3333:4444:5555:6666:7777::', + '1111::3333:4444:5555:6666::8888', + '1111::3333:4444:5555::1.2.3.4', + '1111::3333:4444:5555::7777:8888', + '1111::3333:4444::6666:1.2.3.4', + '1111::3333:4444::6666:7777:8888', + '1111::3333::5555:6666:1.2.3.4', + '1111::3333::5555:6666:7777:8888', + '1111::4444:5555:6666:7777:8888:', + '1111::5555:', + '1111::5555:6666:7777:8888:', + '1111::6666:7777:8888:', + '1111::7777:8888:', + '1111::8888:', + '1111:::', + '1111:::3333:4444:5555:6666:1.2.3.4', + '1111:::3333:4444:5555:6666:7777:8888', + '12345::6:7:8', + '124.15.6.89/60', + '1:2:3:4:5:6:7:8:9', + '1:2:3::4:5:6:7:8:9', + '1:2:3::4:5::7:8', + '1::1.2.256.4', + '1::1.2.3.256', + '1::1.2.3.300', + '1::1.2.3.900', + '1::1.2.300.4', + '1::1.2.900.4', + '1::1.256.3.4', + '1::1.300.3.4', + '1::1.900.3.4', + '1::256.2.3.4', + '1::260.2.3.4', + '1::2::3', + '1::300.2.3.4', + '1::300.300.300.300', + '1::3000.30.30.30', + '1::400.2.3.4', + '1::5:1.2.256.4', + '1::5:1.2.3.256', + '1::5:1.2.3.300', + '1::5:1.2.3.900', + '1::5:1.2.300.4', + '1::5:1.2.900.4', + '1::5:1.256.3.4', + '1::5:1.300.3.4', + '1::5:1.900.3.4', + '1::5:256.2.3.4', + '1::5:260.2.3.4', + '1::5:300.2.3.4', + '1::5:300.300.300.300', + '1::5:3000.30.30.30', + '1::5:400.2.3.4', + '1::5:900.2.3.4', + '1::900.2.3.4', + '1:::3:4:5', + '2001:0000:1234: 0000:0000:C1C0:ABCD:0876', + '2001:0000:1234:0000:0000:C1C0:ABCD:0876 0', + '2001:1:1:1:1:1:255Z255X255Y255', + '2001::FFD3::57ab', + '2001:DB8:0:0:8:800:200C:417A:221', + '2001:db8:85a3::8a2e:37023:7334', + '2001:db8:85a3::8a2e:370k:7334', + '3ffe:0b00:0000:0001:0000:0000:000a', + '3ffe:b00::1::a', + ':', + ':1.2.3.4', + ':1111:2222:3333:4444:5555:6666:1.2.3.4', + ':1111:2222:3333:4444:5555:6666:7777:8888', + ':1111:2222:3333:4444:5555:6666:7777::', + ':1111:2222:3333:4444:5555:6666::', + ':1111:2222:3333:4444:5555:6666::8888', + ':1111:2222:3333:4444:5555::', + ':1111:2222:3333:4444:5555::1.2.3.4', + ':1111:2222:3333:4444:5555::7777:8888', + ':1111:2222:3333:4444:5555::8888', + ':1111:2222:3333:4444::', + ':1111:2222:3333:4444::1.2.3.4', + ':1111:2222:3333:4444::5555', + ':1111:2222:3333:4444::6666:1.2.3.4', + ':1111:2222:3333:4444::6666:7777:8888', + ':1111:2222:3333:4444::7777:8888', + ':1111:2222:3333:4444::8888', + ':1111:2222:3333::', + ':1111:2222:3333::1.2.3.4', + ':1111:2222:3333::5555', + ':1111:2222:3333::5555:6666:1.2.3.4', + ':1111:2222:3333::5555:6666:7777:8888', + ':1111:2222:3333::6666:1.2.3.4', + ':1111:2222:3333::6666:7777:8888', + ':1111:2222:3333::7777:8888', + ':1111:2222:3333::8888', + ':1111:2222::', + ':1111:2222::1.2.3.4', + ':1111:2222::4444:5555:6666:1.2.3.4', + ':1111:2222::4444:5555:6666:7777:8888', + ':1111:2222::5555', + ':1111:2222::5555:6666:1.2.3.4', + ':1111:2222::5555:6666:7777:8888', + ':1111:2222::6666:1.2.3.4', + ':1111:2222::6666:7777:8888', + ':1111:2222::7777:8888', + ':1111:2222::8888', + ':1111::', + ':1111::1.2.3.4', + ':1111::3333:4444:5555:6666:1.2.3.4', + ':1111::3333:4444:5555:6666:7777:8888', + ':1111::4444:5555:6666:1.2.3.4', + ':1111::4444:5555:6666:7777:8888', + ':1111::5555', + ':1111::5555:6666:1.2.3.4', + ':1111::5555:6666:7777:8888', + ':1111::6666:1.2.3.4', + ':1111::6666:7777:8888', + ':1111::7777:8888', + ':1111::8888', + ':2222:3333:4444:5555:6666:1.2.3.4', + ':2222:3333:4444:5555:6666:7777:8888', + ':3333:4444:5555:6666:1.2.3.4', + ':3333:4444:5555:6666:7777:8888', + ':4444:5555:6666:1.2.3.4', + ':4444:5555:6666:7777:8888', + ':5555:6666:1.2.3.4', + ':5555:6666:7777:8888', + ':6666:1.2.3.4', + ':6666:7777:8888', + ':7777:8888', + ':8888', + '::-1', + '::.', + '::..', + '::...', + '::...4', + '::..3.', + '::..3.4', + '::.2..', + '::.2.3.', + '::.2.3.4', + '::1...', + '::1.2..', + '::1.2.256.4', + '::1.2.3.', + '::1.2.3.256', + '::1.2.3.300', + '::1.2.3.900', + '::1.2.300.4', + '::1.2.900.4', + '::1.256.3.4', + '::1.300.3.4', + '::1.900.3.4', + '::1111:2222:3333:4444:5555:6666::', + '::2222:3333:4444:5555:6666:7777:8888:', + '::2222:3333:4444:5555:7777:8888::', + '::2222:3333:4444:5555:7777::8888', + '::2222:3333:4444:5555::1.2.3.4', + '::2222:3333:4444:5555::7777:8888', + '::2222:3333:4444::6666:1.2.3.4', + '::2222:3333:4444::6666:7777:8888', + '::2222:3333::5555:6666:1.2.3.4', + '::2222:3333::5555:6666:7777:8888', + '::2222::4444:5555:6666:1.2.3.4', + '::2222::4444:5555:6666:7777:8888', + '::256.2.3.4', + '::260.2.3.4', + '::300.2.3.4', + '::300.300.300.300', + '::3000.30.30.30', + '::3333:4444:5555:6666:7777:8888:', + '::400.2.3.4', + '::4444:5555:6666:7777:8888:', + '::5555:', + '::5555:6666:7777:8888:', + '::6666:7777:8888:', + '::7777:8888:', + '::8888:', + '::900.2.3.4', + ':::', + ':::1.2.3.4', + ':::2222:3333:4444:5555:6666:1.2.3.4', + ':::2222:3333:4444:5555:6666:7777:8888', + ':::3333:4444:5555:6666:7777:8888', + ':::4444:5555:6666:1.2.3.4', + ':::4444:5555:6666:7777:8888', + ':::5555', + ':::5555:6666:1.2.3.4', + ':::5555:6666:7777:8888', + ':::6666:1.2.3.4', + ':::6666:7777:8888', + ':::7777:8888', + ':::8888', + '::ffff:192x168.1.26', + '::ffff:2.3.4', + '::ffff:257.1.2.3', + 'FF01::101::2', + 'FF02:0000:0000:0000:0000:0000:0000:0000:0001', + 'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:1.2.3.4', + 'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX', + 'a::b::c', + 'a::g', + 'a:a:a:a:a:a:a:a:a', + 'a:aaaaa::', + 'a:b', + 'a:b:c:d:e:f:g:0', + 'ffff:', + 'ffff::ffff::ffff', + 'ffgg:ffff:ffff:ffff:ffff:ffff:ffff:ffff', + 'ldkfj', + '::/129', + '1000:://32', + '::/' ] invalidIpV6.map(ip=>{ - const valid= isValidIP(ip) + const valid= isValidIP(ip) assert.equal(valid, false) }) }) it('Check list of IPV6 Valid addresses', () => { const validIpv6 =[ - "0000:0000:0000:0000:0000:0000:0000:0000", - "0000:0000:0000:0000:0000:0000:0000:0001", - "0:0:0:0:0:0:0:0", - "0:0:0:0:0:0:0:1", - "0:0:0:0:0:0:0::", - "0:0:0:0:0:0:13.1.68.3", - "0:0:0:0:0:0::", - "0:0:0:0:0::", - "0:0:0:0:0:FFFF:129.144.52.38", - "0:0:0:0:1:0:0:0", - "0:0:0:0::", - "0:0:0::", - "0:0::", - "0:1:2:3:4:5:6:7", - "0::", - "0:a:b:c:d:e:f::", - "1080:0:0:0:8:800:200c:417a", - "1080::8:800:200c:417a", - "1111:2222:3333:4444:5555:6666:123.123.123.123", - "1111:2222:3333:4444:5555:6666:7777:8888", - "1111:2222:3333:4444:5555:6666:7777::", - "1111:2222:3333:4444:5555:6666::", - "1111:2222:3333:4444:5555:6666::8888", - "1111:2222:3333:4444:5555::", - "1111:2222:3333:4444:5555::7777:8888", - "1111:2222:3333:4444:5555::8888", - "1111:2222:3333:4444::", - "1111:2222:3333:4444::6666:123.123.123.123", - "1111:2222:3333:4444::6666:7777:8888", - "1111:2222:3333:4444::7777:8888", - "1111:2222:3333:4444::8888", - "1111:2222:3333::", - "1111:2222:3333::5555:6666:123.123.123.123", - "1111:2222:3333::5555:6666:7777:8888", - "1111:2222:3333::6666:123.123.123.123", - "1111:2222:3333::6666:7777:8888", - "1111:2222:3333::7777:8888", - "1111:2222:3333::8888", - "1111:2222::", - "1111:2222::4444:5555:6666:123.123.123.123", - "1111:2222::4444:5555:6666:7777:8888", - "1111:2222::5555:6666:123.123.123.123", - "1111:2222::5555:6666:7777:8888", - "1111:2222::6666:123.123.123.123", - "1111:2222::6666:7777:8888", - "1111:2222::7777:8888", - "1111:2222::8888", - "1111::", - "1111::3333:4444:5555:6666:123.123.123.123", - "1111::3333:4444:5555:6666:7777:8888", - "1111::4444:5555:6666:123.123.123.123", - "1111::4444:5555:6666:7777:8888", - "1111::5555:6666:123.123.123.123", - "1111::5555:6666:7777:8888", - "1111::6666:123.123.123.123", - "1111::6666:7777:8888", - "1111::7777:8888", - "1111::8888", - "1:2:3:4:5:6:1.2.3.4", - "1:2:3:4:5:6:7:8", - "1:2:3:4:5:6::", - "1:2:3:4:5:6::8", - "1:2:3:4:5::", - "1:2:3:4:5::7:8", - "1:2:3:4:5::8", - "1:2:3:4::", - "1:2:3:4::5:1.2.3.4", - "1:2:3:4::7:8", - "1:2:3:4::8", - "1:2:3::", - "1:2:3::5:1.2.3.4", - "1:2:3::7:8", - "1:2:3::8", - "1:2::", - "1:2::5:1.2.3.4", - "1:2::7:8", - "1:2::8", - "1::", - "1::2:3", - "1::2:3:4", - "1::2:3:4:5", - "1::2:3:4:5:6", - "1::2:3:4:5:6:7", - "1::5:1.2.3.4", - "1::5:11.22.33.44", - "1::7:8", - "1::8", - "2001:0000:1234:0000:0000:C1C0:ABCD:0876", - "2001:0000:4136:e378:8000:63bf:3fff:fdd2", - "2001:0db8:0000:0000:0000:0000:1428:57ab", - "2001:0db8:0000:0000:0000::1428:57ab", - "2001:0db8:0:0:0:0:1428:57ab", - "2001:0db8:0:0::1428:57ab", - "2001:0db8:1234:0000:0000:0000:0000:0000", - "2001:0db8:1234::", - "2001:0db8:1234:ffff:ffff:ffff:ffff:ffff", - "2001:0db8:85a3:0000:0000:8a2e:0370:7334", - "2001:0db8::1428:57ab", - "2001::CE49:7601:2CAD:DFFF:7C94:FFFE", - "2001::CE49:7601:E866:EFFF:62C3:FFFE", - "2001:DB8:0:0:8:800:200C:417A", - "2001:DB8::8:800:200C:417A", - "2001:db8:85a3:0:0:8a2e:370:7334", - "2001:db8:85a3::8a2e:370:7334", - "2001:db8::", - "2001:db8::1428:57ab", - "2001:db8:a::123", - "2002::", - "2608::3:5", - "2608:af09:30:0:0:0:0:134", - "2608:af09:30::102a:7b91:c239:baff", - "2::10", - "3ffe:0b00:0000:0000:0001:0000:0000:000a", - "7:6:5:4:3:2:1:0", - "::", - "::0", - "::0:0", - "::0:0:0", - "::0:0:0:0", - "::0:0:0:0:0", - "::0:0:0:0:0:0", - "::0:0:0:0:0:0:0", - "::0:a:b:c:d:e:f", - "::1", - "::123.123.123.123", - "::13.1.68.3", - "::2222:3333:4444:5555:6666:123.123.123.123", - "::2222:3333:4444:5555:6666:7777:8888", - "::2:3", - "::2:3:4", - "::2:3:4:5", - "::2:3:4:5:6", - "::2:3:4:5:6:7", - "::2:3:4:5:6:7:8", - "::3333:4444:5555:6666:7777:8888", - "::4444:5555:6666:123.123.123.123", - "::4444:5555:6666:7777:8888", - "::5555:6666:123.123.123.123", - "::5555:6666:7777:8888", - "::6666:123.123.123.123", - "::6666:7777:8888", - "::7777:8888", - "::8", - "::8888", - "::FFFF:129.144.52.38", - "::ffff:0:0", - "::ffff:0c22:384e", - "::ffff:12.34.56.78", - "::ffff:192.0.2.128", - "::ffff:192.168.1.1", - "::ffff:192.168.1.26", - "::ffff:c000:280", - "FF01:0:0:0:0:0:0:101", - "FF01::101", - "FF02:0000:0000:0000:0000:0000:0000:0001", - "a:b:c:d:e:f:0::", - "fe80:0000:0000:0000:0204:61ff:fe9d:f156", - "fe80:0:0:0:204:61ff:254.157.241.86", - "fe80:0:0:0:204:61ff:fe9d:f156", - "fe80::", - "fe80::1", - "fe80::204:61ff:254.157.241.86", - "fe80::204:61ff:fe9d:f156", - "fe80::217:f2ff:254.7.237.98", - "fe80::217:f2ff:fe07:ed62", - "fedc:ba98:7654:3210:fedc:ba98:7654:3210", - "ff02::1", - "ffff::", - "ffff::3:5", - "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", - "a:0::0:b", - "a:0:0::0:b", - "a:0::0:0:b", - "a::0:0:b", - "a::0:b", - "a:0::b", - "a:0:0::b" + '0000:0000:0000:0000:0000:0000:0000:0000', + '0000:0000:0000:0000:0000:0000:0000:0001', + '0:0:0:0:0:0:0:0', + '0:0:0:0:0:0:0:1', + '0:0:0:0:0:0:0::', + '0:0:0:0:0:0:13.1.68.3', + '0:0:0:0:0:0::', + '0:0:0:0:0::', + '0:0:0:0:0:FFFF:129.144.52.38', + '0:0:0:0:1:0:0:0', + '0:0:0:0::', + '0:0:0::', + '0:0::', + '0:1:2:3:4:5:6:7', + '0::', + '0:a:b:c:d:e:f::', + '1080:0:0:0:8:800:200c:417a', + '1080::8:800:200c:417a', + '1111:2222:3333:4444:5555:6666:123.123.123.123', + '1111:2222:3333:4444:5555:6666:7777:8888', + '1111:2222:3333:4444:5555:6666:7777::', + '1111:2222:3333:4444:5555:6666::', + '1111:2222:3333:4444:5555:6666::8888', + '1111:2222:3333:4444:5555::', + '1111:2222:3333:4444:5555::7777:8888', + '1111:2222:3333:4444:5555::8888', + '1111:2222:3333:4444::', + '1111:2222:3333:4444::6666:123.123.123.123', + '1111:2222:3333:4444::6666:7777:8888', + '1111:2222:3333:4444::7777:8888', + '1111:2222:3333:4444::8888', + '1111:2222:3333::', + '1111:2222:3333::5555:6666:123.123.123.123', + '1111:2222:3333::5555:6666:7777:8888', + '1111:2222:3333::6666:123.123.123.123', + '1111:2222:3333::6666:7777:8888', + '1111:2222:3333::7777:8888', + '1111:2222:3333::8888', + '1111:2222::', + '1111:2222::4444:5555:6666:123.123.123.123', + '1111:2222::4444:5555:6666:7777:8888', + '1111:2222::5555:6666:123.123.123.123', + '1111:2222::5555:6666:7777:8888', + '1111:2222::6666:123.123.123.123', + '1111:2222::6666:7777:8888', + '1111:2222::7777:8888', + '1111:2222::8888', + '1111::', + '1111::3333:4444:5555:6666:123.123.123.123', + '1111::3333:4444:5555:6666:7777:8888', + '1111::4444:5555:6666:123.123.123.123', + '1111::4444:5555:6666:7777:8888', + '1111::5555:6666:123.123.123.123', + '1111::5555:6666:7777:8888', + '1111::6666:123.123.123.123', + '1111::6666:7777:8888', + '1111::7777:8888', + '1111::8888', + '1:2:3:4:5:6:1.2.3.4', + '1:2:3:4:5:6:7:8', + '1:2:3:4:5:6::', + '1:2:3:4:5:6::8', + '1:2:3:4:5::', + '1:2:3:4:5::7:8', + '1:2:3:4:5::8', + '1:2:3:4::', + '1:2:3:4::5:1.2.3.4', + '1:2:3:4::7:8', + '1:2:3:4::8', + '1:2:3::', + '1:2:3::5:1.2.3.4', + '1:2:3::7:8', + '1:2:3::8', + '1:2::', + '1:2::5:1.2.3.4', + '1:2::7:8', + '1:2::8', + '1::', + '1::2:3', + '1::2:3:4', + '1::2:3:4:5', + '1::2:3:4:5:6', + '1::2:3:4:5:6:7', + '1::5:1.2.3.4', + '1::5:11.22.33.44', + '1::7:8', + '1::8', + '2001:0000:1234:0000:0000:C1C0:ABCD:0876', + '2001:0000:4136:e378:8000:63bf:3fff:fdd2', + '2001:0db8:0000:0000:0000:0000:1428:57ab', + '2001:0db8:0000:0000:0000::1428:57ab', + '2001:0db8:0:0:0:0:1428:57ab', + '2001:0db8:0:0::1428:57ab', + '2001:0db8:1234:0000:0000:0000:0000:0000', + '2001:0db8:1234::', + '2001:0db8:1234:ffff:ffff:ffff:ffff:ffff', + '2001:0db8:85a3:0000:0000:8a2e:0370:7334', + '2001:0db8::1428:57ab', + '2001::CE49:7601:2CAD:DFFF:7C94:FFFE', + '2001::CE49:7601:E866:EFFF:62C3:FFFE', + '2001:DB8:0:0:8:800:200C:417A', + '2001:DB8::8:800:200C:417A', + '2001:db8:85a3:0:0:8a2e:370:7334', + '2001:db8:85a3::8a2e:370:7334', + '2001:db8::', + '2001:db8::1428:57ab', + '2001:db8:a::123', + '2002::', + '2608::3:5', + '2608:af09:30:0:0:0:0:134', + '2608:af09:30::102a:7b91:c239:baff', + '2::10', + '3ffe:0b00:0000:0000:0001:0000:0000:000a', + '7:6:5:4:3:2:1:0', + '::', + '::0', + '::0:0', + '::0:0:0', + '::0:0:0:0', + '::0:0:0:0:0', + '::0:0:0:0:0:0', + '::0:0:0:0:0:0:0', + '::0:a:b:c:d:e:f', + '::1', + '::123.123.123.123', + '::13.1.68.3', + '::2222:3333:4444:5555:6666:123.123.123.123', + '::2222:3333:4444:5555:6666:7777:8888', + '::2:3', + '::2:3:4', + '::2:3:4:5', + '::2:3:4:5:6', + '::2:3:4:5:6:7', + '::2:3:4:5:6:7:8', + '::3333:4444:5555:6666:7777:8888', + '::4444:5555:6666:123.123.123.123', + '::4444:5555:6666:7777:8888', + '::5555:6666:123.123.123.123', + '::5555:6666:7777:8888', + '::6666:123.123.123.123', + '::6666:7777:8888', + '::7777:8888', + '::8', + '::8888', + '::FFFF:129.144.52.38', + '::ffff:0:0', + '::ffff:0c22:384e', + '::ffff:12.34.56.78', + '::ffff:192.0.2.128', + '::ffff:192.168.1.1', + '::ffff:192.168.1.26', + '::ffff:c000:280', + 'FF01:0:0:0:0:0:0:101', + 'FF01::101', + 'FF02:0000:0000:0000:0000:0000:0000:0001', + 'a:b:c:d:e:f:0::', + 'fe80:0000:0000:0000:0204:61ff:fe9d:f156', + 'fe80:0:0:0:204:61ff:254.157.241.86', + 'fe80:0:0:0:204:61ff:fe9d:f156', + 'fe80::', + 'fe80::1', + 'fe80::204:61ff:254.157.241.86', + 'fe80::204:61ff:fe9d:f156', + 'fe80::217:f2ff:254.7.237.98', + 'fe80::217:f2ff:fe07:ed62', + 'fedc:ba98:7654:3210:fedc:ba98:7654:3210', + 'ff02::1', + 'ffff::', + 'ffff::3:5', + 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', + 'a:0::0:b', + 'a:0:0::0:b', + 'a:0::0:0:b', + 'a::0:0:b', + 'a::0:b', + 'a:0::b', + 'a:0:0::b' ] validIpv6.map(ip=>{ - const valid= isValidIP(ip) + const valid= isValidIP(ip) assert.equal(valid, true) }) diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..6f62c9aa --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,109 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "ES2015", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + "rootDir": "./src", /* Specify the root folder within your source files. */ + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": false, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist", /* Specify an output folder for all emitted files. */ + "removeComments": false, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + "newLine": "lf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + "noUncheckedIndexedAccess": false, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + "allowUnreachableCode": false, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +}