From 3c0b01af40fc27d51727613696f3b28d5f77a8af Mon Sep 17 00:00:00 2001 From: joewarren Date: Mon, 12 Aug 2013 17:31:52 +0100 Subject: [PATCH 01/38] Fixed using urls for images --- lib/pass.js | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/pass.js b/lib/pass.js index 6242074..5e70cd0 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -238,17 +238,24 @@ Pass.prototype.pipe = function(output) { addFile("pass.json").end(passJson, "utf8"); var expecting = 0; - for (var key in this.images) { + + Object.keys(this.images).forEach(function(key){ var filename = key.replace(/2x$/, "@2x") + ".png"; - addImage(addFile(filename), this.images[key], function(error) { + var file = addFile(filename); + + file.on('close', function(){ + if (expecting === 0){ + doneWithImages(); + } + }); + + addImage(file, self.images[key], function(error) { --expecting; if (error) lastError = error; - if (expecting === 0) - doneWithImages(); }); ++expecting; - } + }) function doneWithImages() { if (lastError) { @@ -290,9 +297,12 @@ function addImage(file, source, callback) { if (/^https?:/i.test(source)) { // URL var protocol = /^https:/i.test(source) ? HTTPS : HTTP; - protocol.get(source, function(response) { + + http.get(source, function(response) { if (response.statusCode == 200) { - response.on("end", callback); + response.on("end", function(){ + callback(); + }); response.pipe(file); response.resume(); } else @@ -347,6 +357,7 @@ function signManifest(template, manifest, callback) { "-sign", "-binary", "-signer", Path.resolve(template.keysPath, identifier + ".pem"), "-certfile", Path.resolve(template.keysPath, "wwdr.pem"), + "-inkey", Path.resolve(template.keysPath, "passkey.pem"), "-passin", "pass:" + template.password ]; var sign = execFile("openssl", args, { stdio: "pipe" }, function(error, stdout, stderr) { From 3bfb5f546ee708231ff17708eacb32d4b4d94583 Mon Sep 17 00:00:00 2001 From: joewarren Date: Mon, 12 Aug 2013 18:52:42 +0100 Subject: [PATCH 02/38] Changed back to for loop --- lib/pass.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pass.js b/lib/pass.js index 5e70cd0..4a680a2 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -239,7 +239,7 @@ Pass.prototype.pipe = function(output) { var expecting = 0; - Object.keys(this.images).forEach(function(key){ + for (var key in self.images ){ var filename = key.replace(/2x$/, "@2x") + ".png"; var file = addFile(filename); @@ -255,7 +255,7 @@ Pass.prototype.pipe = function(output) { lastError = error; }); ++expecting; - }) + } function doneWithImages() { if (lastError) { From fe612e94e4d848496344e767dbd8ffa86288ea45 Mon Sep 17 00:00:00 2001 From: joewarren Date: Mon, 12 Aug 2013 18:53:45 +0100 Subject: [PATCH 03/38] remove new line --- lib/pass.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index 4a680a2..81a227c 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -238,7 +238,6 @@ Pass.prototype.pipe = function(output) { addFile("pass.json").end(passJson, "utf8"); var expecting = 0; - for (var key in self.images ){ var filename = key.replace(/2x$/, "@2x") + ".png"; var file = addFile(filename); From 9e7b0a5e65d0511c72070aeb32879113564d8a88 Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Mon, 12 Aug 2013 19:59:56 -0700 Subject: [PATCH 04/38] Revert "remove new line" This reverts commit fe612e94e4d848496344e767dbd8ffa86288ea45. --- lib/pass.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pass.js b/lib/pass.js index 81a227c..4a680a2 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -238,6 +238,7 @@ Pass.prototype.pipe = function(output) { addFile("pass.json").end(passJson, "utf8"); var expecting = 0; + for (var key in self.images ){ var filename = key.replace(/2x$/, "@2x") + ".png"; var file = addFile(filename); From db4642132d999b53f8b7219a732192a6d6a57647 Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Mon, 12 Aug 2013 20:00:03 -0700 Subject: [PATCH 05/38] Revert "Changed back to for loop" This reverts commit 3bfb5f546ee708231ff17708eacb32d4b4d94583. --- lib/pass.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pass.js b/lib/pass.js index 4a680a2..5e70cd0 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -239,7 +239,7 @@ Pass.prototype.pipe = function(output) { var expecting = 0; - for (var key in self.images ){ + Object.keys(this.images).forEach(function(key){ var filename = key.replace(/2x$/, "@2x") + ".png"; var file = addFile(filename); @@ -255,7 +255,7 @@ Pass.prototype.pipe = function(output) { lastError = error; }); ++expecting; - } + }) function doneWithImages() { if (lastError) { From ac9650b20f2999fafc67fe3bed2cd09990ad7708 Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Mon, 12 Aug 2013 20:00:10 -0700 Subject: [PATCH 06/38] Revert "Fixed using urls for images" This reverts commit 3c0b01af40fc27d51727613696f3b28d5f77a8af. --- lib/pass.js | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/lib/pass.js b/lib/pass.js index 5e70cd0..6242074 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -238,24 +238,17 @@ Pass.prototype.pipe = function(output) { addFile("pass.json").end(passJson, "utf8"); var expecting = 0; - - Object.keys(this.images).forEach(function(key){ + for (var key in this.images) { var filename = key.replace(/2x$/, "@2x") + ".png"; - var file = addFile(filename); - - file.on('close', function(){ - if (expecting === 0){ - doneWithImages(); - } - }); - - addImage(file, self.images[key], function(error) { + addImage(addFile(filename), this.images[key], function(error) { --expecting; if (error) lastError = error; + if (expecting === 0) + doneWithImages(); }); ++expecting; - }) + } function doneWithImages() { if (lastError) { @@ -297,12 +290,9 @@ function addImage(file, source, callback) { if (/^https?:/i.test(source)) { // URL var protocol = /^https:/i.test(source) ? HTTPS : HTTP; - - http.get(source, function(response) { + protocol.get(source, function(response) { if (response.statusCode == 200) { - response.on("end", function(){ - callback(); - }); + response.on("end", callback); response.pipe(file); response.resume(); } else @@ -357,7 +347,6 @@ function signManifest(template, manifest, callback) { "-sign", "-binary", "-signer", Path.resolve(template.keysPath, identifier + ".pem"), "-certfile", Path.resolve(template.keysPath, "wwdr.pem"), - "-inkey", Path.resolve(template.keysPath, "passkey.pem"), "-passin", "pass:" + template.password ]; var sign = execFile("openssl", args, { stdio: "pipe" }, function(error, stdout, stderr) { From 3257a69fe0f89a393f639c1add08db652c6c8686 Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Mon, 12 Aug 2013 20:00:56 -0700 Subject: [PATCH 07/38] Removed unzip test --- test/pass_test.js | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/test/pass_test.js b/test/pass_test.js index d5f2967..21eb7c1 100644 --- a/test/pass_test.js +++ b/test/pass_test.js @@ -204,19 +204,6 @@ describe("Pass", function() { }); - describe("unzip", function() { - - before(function(done) { - var unzip = require("../lib/unzip"); - var input = File.createReadStream("/tmp/pass.pkpass"); - var files = new unzip(input); - console.dir(files); - }); - - it("should do something", function() { - }); - }); - }); }); From be85b252694a341e8915a3966c1f1d15e84505f7 Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Mon, 12 Aug 2013 20:01:23 -0700 Subject: [PATCH 08/38] Fix smime error handling --- lib/pass.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index 6242074..b9bb30a 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -350,7 +350,7 @@ function signManifest(template, manifest, callback) { "-passin", "pass:" + template.password ]; var sign = execFile("openssl", args, { stdio: "pipe" }, function(error, stdout, stderr) { - if (error) { + if (error || stderr.trim()) { callback(new Error(stderr)); } else { var signature = stdout.split(/\n\n/)[3]; From 4a1652a0735a0b58399d3051a99dfc8b52d5eca6 Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Mon, 12 Aug 2013 20:01:34 -0700 Subject: [PATCH 09/38] Updated dependencies --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 9726470..3afd4fd 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,11 @@ "node-passbook": "./bin/node-passbook" }, "dependencies": { - "async": "0.1.22", - "cli": "0.4.4" + "async": "0.2.9", + "cli": "0.4.5" }, "devDependencies": { - "mocha": "1.6.0" + "mocha": "1.12.0" }, "scripts": { "test": "mocha" From d4ccf343dda56fb24495c4990fac8df669507d56 Mon Sep 17 00:00:00 2001 From: Mario Uher Date: Thu, 13 Mar 2014 10:47:24 +0100 Subject: [PATCH 10/38] Normalizes code snippets in README.md. --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1709990..2265c9a 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ pass.loadImagesFrom("images"); You can add the image itself (a `Buffer`), or provide the name of a file or an HTTP/S URL for retrieving the image. You can also provide a function that will be called when it's time to load the image, and should pass an error, or `null` -and a buffer to its callback. +and a buffer to its callback. # Generate the file @@ -135,12 +135,12 @@ and a buffer to its callback. To generate a file: ``` -var file = File.createWriteStream("mypass.pkpass"); -passbook.on("error", function(error) { +var file = fs.createWriteStream("mypass.pkpass"); +pass.on("error", function(error) { console.error(error); process.exit(1); }) -passbook.pipe(output); +pass.pipe(file); ``` Your pass will emit the `error` event if it fails to generate a valid Passbook @@ -153,10 +153,9 @@ callback (if supplied). ``` server.get("/mypass", function(request, response) { - passbook.render(response, function(error) { + pass.render(response, function(error) { if (error) console.error(error); }); }); ``` - From 9ae4fa28cd1feb148d594c689d237aca12865a8f Mon Sep 17 00:00:00 2001 From: Mario Uher Date: Thu, 13 Mar 2014 10:48:56 +0100 Subject: [PATCH 11/38] Adds syntax highlighting to README.md. --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 2265c9a..c0c8c12 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ You will also need the 'Apple Worldwide Developer Relations Certification Authority' certificate and to conver the `.p12` files into `.pem` files. You can do both using the `node-passbook prepare-keys` command: -``` +```sh node-passbook prepare-keys -p keys ``` @@ -23,7 +23,7 @@ This is the same directory into which you placet the `.p12` files. Start with a template. A template has all the common data fields that will be shared between your passes, and also defines the keys to use for signing it. -``` +```js var createTemplate = require("passbook"); var template = createTemplate("coupon", { @@ -38,7 +38,7 @@ second optional argument has any fields you want to set on the template. You can access template fields directly, or from chained accessor methods, e.g: -``` +```js template.fields.passTypeIdentifier = "pass.com.example.passbook"; console.log(template.passTypeIdentifier()); @@ -58,7 +58,7 @@ Optional fields that you can set on the template (or pass): `backgroundColor`, In addition, you need to tell the template where to find the key files and where to load images from: -``` +```js template.keys("/etc/passbook/keys", "secret"); template.loadImagesFrom("images"); ``` @@ -71,7 +71,7 @@ you may want to specify them once in the template. To create a new pass from a template: -``` +```js var pass = template.createPass({ serialNumber: "123456", description: "20% off" @@ -81,7 +81,7 @@ var pass = template.createPass({ Just like template, you can access pass fields directly, or from chained accessor methods, e.g: -``` +```js pass.fields.serialNumber = "12345"; console.log(pass.serialNumber()); pass.serialNumber("12345"). @@ -95,7 +95,7 @@ sigh. To make it easier, you can use methods like `add`, `get` and `remove` that will do the logical thing. For example, to add a primary field: -``` +```js pass.primaryFields.add("date", "Date", "Nov 1"); pass.primaryFields.add({ key: "time", label: "Time", value: "10:00AM"); ``` @@ -104,21 +104,21 @@ You can also call `add` with an array of triplets or array of objects. To get one or all fields: -``` +```js var dateField = pass.primaryFields.get("date"); var allFields = pass.primaryFields.all(); ``` To remove one or all fields: -``` +```js pass.primaryFields.remove("date"); pass.primaryFields.clear(); ``` Adding images to a pass is the same as adding images to a template: -``` +```js pass.images.icon = iconFilename; pass.icon(iconFilename); pass.loadImagesFrom("images"); @@ -134,7 +134,7 @@ and a buffer to its callback. To generate a file: -``` +```js var file = fs.createWriteStream("mypass.pkpass"); pass.on("error", function(error) { console.error(error); @@ -151,7 +151,7 @@ You can pipe to any writeable stream. When working with HTTP, the `render` method will set the content type, pipe to the HTTP response, and make use of a callback (if supplied). -``` +```js server.get("/mypass", function(request, response) { pass.render(response, function(error) { if (error) From 982f3bc8e6ee8f9e2cb7730928d41c39dd9b8161 Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Mon, 24 Mar 2014 09:45:53 -0700 Subject: [PATCH 12/38] Try to release without Icon file --- bin/node-passbook | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/node-passbook b/bin/node-passbook index e60e7b4..5a1681f 100755 --- a/bin/node-passbook +++ b/bin/node-passbook @@ -81,7 +81,7 @@ function extractWWDRKey(keysPath, callback) { }, callback); } }); -} +} // Convert all P12 files in the keys directory into PEM files. diff --git a/package.json b/package.json index 3afd4fd..ca8f7d8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "passbook", "description": "iOS Passbook for the Node hacker", "homepage": "https://github.com/assaf/node-passbook", - "version": "2.0.1", + "version": "2.0.2", "author": { "name": "Assaf Arkin", "email": "assaf@labnotes.org" From 5d95b5645d9f2daa39179f27eff08017e31fdba0 Mon Sep 17 00:00:00 2001 From: Andrew Barba Date: Sun, 13 Apr 2014 16:21:09 -0400 Subject: [PATCH 13/38] properly add all images to manifest by listening to file close event --- lib/pass.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index b9bb30a..36c779f 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -292,7 +292,7 @@ function addImage(file, source, callback) { var protocol = /^https:/i.test(source) ? HTTPS : HTTP; protocol.get(source, function(response) { if (response.statusCode == 200) { - response.on("end", callback); + file.on("close", callback); response.pipe(file); response.resume(); } else From c5176f13ac170f583b0b89e0a5e63b192b464fb9 Mon Sep 17 00:00:00 2001 From: sunsus Date: Sat, 27 Sep 2014 14:01:55 +0200 Subject: [PATCH 14/38] Update pass.js Fix Images over HTTP --- lib/pass.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/pass.js b/lib/pass.js index 36c779f..a1051bd 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -255,14 +255,16 @@ Pass.prototype.pipe = function(output) { zip.close(); self.emit("error", lastError); } else { - self.signZip(zip, manifest, function(error) { - zip.close(); - zip.on("end", function() { - self.emit("end"); - }); - zip.on("error", function(error) { - self.emit("error", error); - }); + process.nextTick(function() { + self.signZip(zip, manifest, function(error) { + zip.close(); + zip.on("end", function() { + self.emit("end"); + }); + zip.on("error", function(error) { + self.emit("error", error); + }); + }); }); } } From 518831999cadb421fa1f60b07eb8f4e07517d885 Mon Sep 17 00:00:00 2001 From: sunsus Date: Sat, 27 Sep 2014 14:04:01 +0200 Subject: [PATCH 15/38] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ca8f7d8..726c6f9 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ ], "repository": { "type": "git", - "url": "git://github.com/assaf/node-passbook" + "url": "git://github.com/sunsus/node-passbook.git" }, "bugs": { "url": "http://github.com/assaf/node-passbook/issues" From 8dd4f0aad723bea249139ac6cdddf9a886375c62 Mon Sep 17 00:00:00 2001 From: sunsus Date: Sat, 27 Sep 2014 14:06:45 +0200 Subject: [PATCH 16/38] Update package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 726c6f9..a8d791d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "passbook", "description": "iOS Passbook for the Node hacker", "homepage": "https://github.com/assaf/node-passbook", - "version": "2.0.2", + "version": "2.0.3", "author": { "name": "Assaf Arkin", "email": "assaf@labnotes.org" @@ -28,7 +28,7 @@ ], "repository": { "type": "git", - "url": "git://github.com/sunsus/node-passbook.git" + "url": "git://github.com/assaf/node-passbook.git" }, "bugs": { "url": "http://github.com/assaf/node-passbook/issues" From 8eea3ff78f01c2c728d6f5e97137d72da1b47054 Mon Sep 17 00:00:00 2001 From: 18601673727 <18601673727@163.com> Date: Tue, 6 Jan 2015 11:59:56 +0800 Subject: [PATCH 17/38] fixed a typo in pass.js --- lib/pass.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pass.js b/lib/pass.js index 36c779f..eb62b62 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -32,8 +32,8 @@ var REQUIRED_IMAGES = [ "icon", "logo" ]; // Create a new pass. // -// tempplate - The template -// fields - Pass fields (description, serialNumber, logoText) +// template - The template +// fields - Pass fields (description, serialNumber, logoText) function Pass(template, fields, images) { this.template = template; this.fields = cloneObject(fields); From 4abc2280a4aaa42ccf9ab64df82bd2d618f98c66 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 2 Feb 2015 13:28:14 +1100 Subject: [PATCH 18/38] windows error messages --- lib/pass.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index eb62b62..18d3909 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -350,7 +350,9 @@ function signManifest(template, manifest, callback) { "-passin", "pass:" + template.password ]; var sign = execFile("openssl", args, { stdio: "pipe" }, function(error, stdout, stderr) { - if (error || stderr.trim()) { + var trimmedStderr = stderr.trim(); + // Windows outputs some unhelpful error messages, but still produces a valid signature + if (error || trimmedStderr != null && trimmedStderr != "Loading 'screen' into random state - done" && trimmedStderr != "Loading 'screen' into random state - done\nunable to write 'random state'") { callback(new Error(stderr)); } else { var signature = stdout.split(/\n\n/)[3]; From 6b8a16f4a3331352ea18fee5d32883e4d1b94d31 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 2 Feb 2015 13:36:40 +1100 Subject: [PATCH 19/38] \r --- lib/pass.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index 18d3909..3d94bfc 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -352,7 +352,7 @@ function signManifest(template, manifest, callback) { var sign = execFile("openssl", args, { stdio: "pipe" }, function(error, stdout, stderr) { var trimmedStderr = stderr.trim(); // Windows outputs some unhelpful error messages, but still produces a valid signature - if (error || trimmedStderr != null && trimmedStderr != "Loading 'screen' into random state - done" && trimmedStderr != "Loading 'screen' into random state - done\nunable to write 'random state'") { + if (error || trimmedStderr != null && trimmedStderr != "Loading 'screen' into random state - done" && trimmedStderr != "Loading 'screen' into random state - done\r\nunable to write 'random state'") { callback(new Error(stderr)); } else { var signature = stdout.split(/\n\n/)[3]; From 6fcf949979289b7cdd58c8a4692ce69bf6be2aab Mon Sep 17 00:00:00 2001 From: Andrew Barba Date: Tue, 3 Mar 2015 00:08:14 -0500 Subject: [PATCH 20/38] add support for Node.js 0.12 and io.js 1.4 --- CHANGELOG.md | 11 +++++++++++ lib/pass.js | 25 ++++++++++--------------- package.json | 7 +++---- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7afe079..895ea8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## 2.1.0 March 2, 2015 + +Add support for Node.js 0.12 and io.js 1.4 + +Fix failing image tests on Node.js 0.12 and io.js 1.4 + +Fix failing signature check on Node.js 0.12 and io.js 1.4 + +Remove unused async dependency + + ## 2.0.1 November 14, 2012 Fix addImage not working with buffers. diff --git a/lib/pass.js b/lib/pass.js index bd385f8..5193dfd 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -256,15 +256,15 @@ Pass.prototype.pipe = function(output) { self.emit("error", lastError); } else { process.nextTick(function() { - self.signZip(zip, manifest, function(error) { - zip.close(); - zip.on("end", function() { - self.emit("end"); - }); - zip.on("error", function(error) { - self.emit("error", error); - }); - }); + self.signZip(zip, manifest, function(error) { + zip.close(); + zip.on("end", function() { + self.emit("end"); + }); + zip.on("error", function(error) { + self.emit("error", error); + }); + }); }); } } @@ -354,7 +354,7 @@ function signManifest(template, manifest, callback) { var sign = execFile("openssl", args, { stdio: "pipe" }, function(error, stdout, stderr) { var trimmedStderr = stderr.trim(); // Windows outputs some unhelpful error messages, but still produces a valid signature - if (error || trimmedStderr != null && trimmedStderr != "Loading 'screen' into random state - done" && trimmedStderr != "Loading 'screen' into random state - done\r\nunable to write 'random state'") { + if (error || (trimmedStderr && trimmedStderr.indexOf('- done') < 0)) { callback(new Error(stderr)); } else { var signature = stdout.split(/\n\n/)[3]; @@ -393,11 +393,6 @@ function SHAWriteStream(manifest, filename, output) { this.sha = Crypto.createHash("sha1"); output.on("close", this.emit.bind(this, "close")); output.on("error", this.emit.bind(this, "error")); - var self = this; - this.on("pipe", function(source) { - source.on("data", self.write.bind(self)); - source.resume(); - }); } inherits(SHAWriteStream, Stream); diff --git a/package.json b/package.json index a8d791d..e984ca1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "passbook", "description": "iOS Passbook for the Node hacker", "homepage": "https://github.com/assaf/node-passbook", - "version": "2.0.3", + "version": "2.1.0", "author": { "name": "Assaf Arkin", "email": "assaf@labnotes.org" @@ -11,11 +11,10 @@ "node-passbook": "./bin/node-passbook" }, "dependencies": { - "async": "0.2.9", - "cli": "0.4.5" + "cli": "0.6.5" }, "devDependencies": { - "mocha": "1.12.0" + "mocha": "2.1.0" }, "scripts": { "test": "mocha" From 644d40a8d77db66729ff515b7a58b7fb7592b721 Mon Sep 17 00:00:00 2001 From: Tomas Date: Thu, 16 Apr 2015 11:27:31 -0700 Subject: [PATCH 21/38] Update package.json with async dependency. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index e984ca1..405b52b 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "node-passbook": "./bin/node-passbook" }, "dependencies": { + "async": "^0.9.0", "cli": "0.6.5" }, "devDependencies": { From 81ffe97de8a675777c178e7a74a81acc123cb615 Mon Sep 17 00:00:00 2001 From: Tomas Date: Thu, 16 Apr 2015 11:54:01 -0700 Subject: [PATCH 22/38] Emit error if it failed to sign the zip with manifest file --- lib/pass.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/pass.js b/lib/pass.js index 5193dfd..620313d 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -257,6 +257,9 @@ Pass.prototype.pipe = function(output) { } else { process.nextTick(function() { self.signZip(zip, manifest, function(error) { + if (error) { + return self.emit("error", error); + } zip.close(); zip.on("end", function() { self.emit("end"); From b4bdbafea5deb806937a029c0839db60b93afc2a Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Thu, 16 Apr 2015 13:09:37 -0700 Subject: [PATCH 23/38] Version 2.1.1 --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 895ea8b..90d55e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.1.1 April 16, 2015 + +Update package.json with async dependency (tomasdev) + +Emit error if it failed to sign the zip with manifest file (tomasdev) + + ## 2.1.0 March 2, 2015 Add support for Node.js 0.12 and io.js 1.4 diff --git a/package.json b/package.json index 405b52b..ba5cfd0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "passbook", "description": "iOS Passbook for the Node hacker", "homepage": "https://github.com/assaf/node-passbook", - "version": "2.1.0", + "version": "2.1.1", "author": { "name": "Assaf Arkin", "email": "assaf@labnotes.org" From 5d8cf7b4526ce4133736117c5d02dc680320aecb Mon Sep 17 00:00:00 2001 From: Philip Heinser Date: Fri, 8 May 2015 01:55:17 +0200 Subject: [PATCH 24/38] Unzip Remote Images If Content-Encoding is "gzip" --- lib/pass.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index 620313d..3fefcfd 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -11,6 +11,7 @@ var HTTP = require("http"); var HTTPS = require("https"); var Path = require("path"); var Zip = require("./zip"); +var zlib = require("zlib"); // Top-level pass fields. @@ -298,7 +299,11 @@ function addImage(file, source, callback) { protocol.get(source, function(response) { if (response.statusCode == 200) { file.on("close", callback); - response.pipe(file); + if (response.headers['content-encoding'] === "gzip") { + response.pipe(zlib.createGunzip()).pipe(file); + } else { + response.pipe(file); + } response.resume(); } else callback(new Error("Server returned " + response.statusCode + " for " + source)); From 13dd01050539fc1100f771cd7066de018d7d41b3 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Sat, 15 Aug 2015 13:38:10 +0200 Subject: [PATCH 25/38] Added "beacons" to TOP_LEVEL fields in pass.js to support iBeacons as mentioned in issue #42. --- lib/pass.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index 3fefcfd..4e90a8a 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -18,7 +18,7 @@ var zlib = require("zlib"); var TOP_LEVEL = [ "authenticationToken", "backgroundColor", "barcode", "description", "foregroundColor", "labelColor", "locations", "logoText", "organizationName", "relevantDate", "serialNumber", - "suppressStripShine", "webServiceURL"]; + "suppressStripShine", "webServiceURL", "beacons"]; // These top level fields are required for a valid pass. var REQUIRED_TOP_LEVEL = [ "description", "organizationName", "passTypeIdentifier", "serialNumber", "teamIdentifier" ]; From 4ab4d232c8b137e36d45be0da6c3070b3beed837 Mon Sep 17 00:00:00 2001 From: thedumbterminal Date: Tue, 25 Oct 2016 15:14:23 +0100 Subject: [PATCH 26/38] added extra fields for companion app info --- lib/pass.js | 3 ++- test/pass_test.js | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index 3fefcfd..97cc257 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -15,7 +15,8 @@ var zlib = require("zlib"); // Top-level pass fields. -var TOP_LEVEL = [ "authenticationToken", "backgroundColor", "barcode", "description", +var TOP_LEVEL = [ "appLaunchURL", "associatedStoreIdentifiers", "authenticationToken", + "backgroundColor", "barcode", "description", "foregroundColor", "labelColor", "locations", "logoText", "organizationName", "relevantDate", "serialNumber", "suppressStripShine", "webServiceURL"]; diff --git a/test/pass_test.js b/test/pass_test.js index 21eb7c1..2559ee6 100644 --- a/test/pass_test.js +++ b/test/pass_test.js @@ -107,6 +107,24 @@ describe("Pass", function() { }); }); + describe("with companion app keys", function() { + + before(function() { + var fields = cloneExcept(this.fields, "not_used"); + fields.appLaunchURL = "some_app_launch_url"; + fields.associatedStoreIdentifiers = [123, 456]; + this.pass = this.template.createPass(fields); + }); + + it("includes the app launch URL", function() { + assert.equal(this.pass.fields.appLaunchURL, "some_app_launch_url"); + }); + + it("includes the associated store identifiers", function() { + assert.deepEqual(this.pass.fields.associatedStoreIdentifiers, [123, 456]); + }); + + }); describe("generated", function() { before(function() { From 7044c20a236577e5b852c2ce64e2abc612370a17 Mon Sep 17 00:00:00 2001 From: arturojain Date: Sat, 19 Nov 2016 19:26:43 -0600 Subject: [PATCH 27/38] listen for finish event on fs --- lib/zip.js | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/zip.js b/lib/zip.js index 7e89c95..5632f7d 100644 --- a/lib/zip.js +++ b/lib/zip.js @@ -50,6 +50,10 @@ function Zip(output) { } zip.emit("error", error); }); + output.on("finish", function () { + debug("Zip completed"); + zip.emit("end"); + }) output.on("close", function() { debug("Zip completed"); zip.emit("end"); diff --git a/package.json b/package.json index ba5cfd0..801a1ed 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "passbook", "description": "iOS Passbook for the Node hacker", "homepage": "https://github.com/assaf/node-passbook", - "version": "2.1.1", + "version": "2.1.2", "author": { "name": "Assaf Arkin", "email": "assaf@labnotes.org" From 3561ad5cd9afe83d4e999bcc4ce0552d6f4fc0ec Mon Sep 17 00:00:00 2001 From: Augusto Souza Date: Tue, 21 Mar 2017 10:37:29 -0300 Subject: [PATCH 28/38] Using follow redirects for HTTPS and HTTP requests --- lib/pass.js | 4 ++-- package.json | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/pass.js b/lib/pass.js index 3fefcfd..f48bcd1 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -7,8 +7,8 @@ var execFile = require("child_process").execFile; var Stream = require("stream"); var inherits = require("util").inherits; var File = require("fs"); -var HTTP = require("http"); -var HTTPS = require("https"); +var HTTP = require("follow-redirects").http; +var HTTPS = require("follow-redirects").https; var Path = require("path"); var Zip = require("./zip"); var zlib = require("zlib"); diff --git a/package.json b/package.json index ba5cfd0..5e0e60e 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ }, "dependencies": { "async": "^0.9.0", - "cli": "0.6.5" + "cli": "0.6.5", + "follow-redirects": "^1.2.3" }, "devDependencies": { "mocha": "2.1.0" From 329c8cd61991f1745a6c0bac2c7ed9a3b8e7cf64 Mon Sep 17 00:00:00 2001 From: akadko Date: Sat, 12 Aug 2017 22:01:25 +0300 Subject: [PATCH 29/38] Fixed parsing Windows stdout --- lib/pass.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index 3fefcfd..3e5d729 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -365,7 +365,7 @@ function signManifest(template, manifest, callback) { if (error || (trimmedStderr && trimmedStderr.indexOf('- done') < 0)) { callback(new Error(stderr)); } else { - var signature = stdout.split(/\n\n/)[3]; + var signature = stdout.split(/\r\n/)[3]; callback(null, new Buffer(signature, "base64")); } }); From 398e3405cfe5533cc1188a65c82313156ee1ca2d Mon Sep 17 00:00:00 2001 From: akadko Date: Wed, 10 Jan 2018 23:25:21 +0300 Subject: [PATCH 30/38] Fixed parsing output of openssl command That is needed to properly parse output on both Windows and Linux systems --- lib/pass.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index 3e5d729..505b295 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -365,7 +365,7 @@ function signManifest(template, manifest, callback) { if (error || (trimmedStderr && trimmedStderr.indexOf('- done') < 0)) { callback(new Error(stderr)); } else { - var signature = stdout.split(/\r\n/)[3]; + var signature = stdout.split(/(\r\n|\n\n)/)[3]; callback(null, new Buffer(signature, "base64")); } }); From f20f24e024da88e2a00f57dfd5b419d95794cbd0 Mon Sep 17 00:00:00 2001 From: Juan Berzal Date: Thu, 11 Jan 2018 21:33:36 +0100 Subject: [PATCH 31/38] Fix README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c0c8c12..8e240bd 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ will do the logical thing. For example, to add a primary field: ```js pass.primaryFields.add("date", "Date", "Nov 1"); -pass.primaryFields.add({ key: "time", label: "Time", value: "10:00AM"); +pass.primaryFields.add({ key: "time", label: "Time", value: "10:00AM"}); ``` You can also call `add` with an array of triplets or array of objects. From 1aca782f37716d51082ffd1b4d2df8650c5101cf Mon Sep 17 00:00:00 2001 From: Arne Schubert Date: Mon, 8 Oct 2018 15:31:10 +0200 Subject: [PATCH 32/38] Use the target of the pipe method also as its return value For additional information take a look at the stream guide of node.js https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options --- lib/pass.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index 3fefcfd..0f5ded9 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -222,7 +222,7 @@ Pass.prototype.pipe = function(output) { process.nextTick(function() { self.emit("error", error); }); - return; + return output; } // Construct manifest here @@ -272,6 +272,7 @@ Pass.prototype.pipe = function(output) { }); } } + return output; }; From 4936d8f8e09704aac20ae553cdd2496fa9041655 Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Sun, 25 Nov 2018 12:18:01 -0800 Subject: [PATCH 33/38] new Buffer deprecated --- lib/pass.js | 6 +++--- lib/zip.js | 14 +++++++------- package.json | 12 +++++++----- test/pass_test.js | 2 +- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/lib/pass.js b/lib/pass.js index e8cec75..fd298b3 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -236,7 +236,7 @@ Pass.prototype.pipe = function(output) { } // Create pass.json - var passJson = new Buffer(JSON.stringify(this.getPassJSON()), "utf-8"); + var passJson = Buffer.from(JSON.stringify(this.getPassJSON()), "utf-8"); addFile("pass.json").end(passJson, "utf8"); var expecting = 0; @@ -362,13 +362,13 @@ function signManifest(template, manifest, callback) { "-passin", "pass:" + template.password ]; var sign = execFile("openssl", args, { stdio: "pipe" }, function(error, stdout, stderr) { - var trimmedStderr = stderr.trim(); + var trimmedStderr = stderr.trim(); // Windows outputs some unhelpful error messages, but still produces a valid signature if (error || (trimmedStderr && trimmedStderr.indexOf('- done') < 0)) { callback(new Error(stderr)); } else { var signature = stdout.split(/(\r\n|\n\n)/)[3]; - callback(null, new Buffer(signature, "base64")); + callback(null, Buffer.from(signature, "base64")); } }); sign.stdin.write(manifest); diff --git a/lib/zip.js b/lib/zip.js index 5632f7d..026aace 100644 --- a/lib/zip.js +++ b/lib/zip.js @@ -118,8 +118,8 @@ Zip.prototype._flush = function() { // Write next central directory header. Returns header size; Zip.prototype._writeCentralDirectoryHeader = function(file) { - var filename = new Buffer(file.filename, "utf-8"); - var buffer = new Buffer(46 + filename.length); + var filename = Buffer.from(file.filename, "utf-8"); + var buffer = Buffer.alloc(46 + filename.length); // central file header signature buffer.writeInt32LE(0x02014b50, 0); @@ -165,7 +165,7 @@ Zip.prototype._writeCentralDirectoryHeader = function(file) { // Write end of central directory record and close output stream. Zip.prototype._writeEndOfCentralDirectory = function(offsetOfCentralDirectory, sizeOfCentralDirectory) { - var buffer = new Buffer(22); + var buffer = Buffer.alloc(22); // end of central dir signature buffer.writeInt32LE(0x06054b50, 0); // number of this disk @@ -277,7 +277,7 @@ File.prototype.write = function(buffer, encoding) { if (!this.writable) throw new Error("This file no longer open for writing"); if (typeof(buffer) == "string" || buffer instanceof String) - buffer = new Buffer(buffer, encoding || "utf8"); + buffer = Buffer.from(buffer, encoding || "utf8"); // crc-32 for (var i = 0; i < buffer.length; i++) { @@ -315,8 +315,8 @@ File.prototype.destroy = function() { File.prototype._writeLocalFileHeader = function() { debug("Started writing", this.filename); this._offset = this.zip._offset; - var filename = new Buffer(this.filename, "utf-8"); - var buffer = new Buffer(30 + filename.length); + var filename = Buffer.from(this.filename, "utf-8"); + var buffer = Buffer.alloc(30 + filename.length); // local file header signature buffer.writeInt32LE(0x04034b50, 0); @@ -391,7 +391,7 @@ File.prototype._doneWritingFile = function() { File.prototype._writeDataDescriptor = function() { // Write data descriptor at end of file: this is used for data we can only // determine after processing file (CRC, length). - var buffer = new Buffer(16); + var buffer = Buffer.alloc(16); buffer.writeInt32LE(0x08074b50, 0); buffer.writeInt32LE(this._crc ^ -1, 4); // compressed size diff --git a/package.json b/package.json index 71af01a..988a472 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,5 @@ -{ "name": "passbook", +{ + "name": "passbook", "description": "iOS Passbook for the Node hacker", "homepage": "https://github.com/assaf/node-passbook", "version": "2.1.2", @@ -11,12 +12,12 @@ "node-passbook": "./bin/node-passbook" }, "dependencies": { - "async": "^0.9.0", - "cli": "0.6.5", + "async": "^2.6.1", + "cli": "^1.0.1", "follow-redirects": "^1.2.3" }, "devDependencies": { - "mocha": "2.1.0" + "mocha": "^5.2.0" }, "scripts": { "test": "mocha" @@ -35,7 +36,8 @@ "url": "http://github.com/assaf/node-passbook/issues" }, "licenses": [ - { "type": "MIT", + { + "type": "MIT", "url": "http://github.com/assaf/node-passbook/blob/master/MIT-LICENSE" } ] diff --git a/test/pass_test.js b/test/pass_test.js index 2559ee6..7e59845 100644 --- a/test/pass_test.js +++ b/test/pass_test.js @@ -247,7 +247,7 @@ function unzip(zipFile, filename, callback) { if (error) { callback(new Error(stdout)); } else { - callback(null, new Buffer(stdout, "binary")); + callback(null, Buffer.from(stdout, "binary")); } }); } From 34ef4300707dd81d1bd33fb28f95f61881fb58dc Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Sun, 25 Nov 2018 12:27:26 -0800 Subject: [PATCH 34/38] Version 2.2.0 --- CHANGELOG.md | 19 +++++++++++++++++++ package.json | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90d55e9..170f5c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +## 2.2.0 November 25, 2015 + +Requires Node 6.x or later, due to changes to the `Buffer` class. + +Unzip Remote Images If Content-Encoding is "gzip" #37 (philipheinser) + +Support iBeacons #43 (fabianfett) + +Add extra fields for companion app info #55 (thedumbterminal) + +Listen for finish event on fs #56 (arturojain) + +Follow redirects for HTTPS and HTTP requests #57 (augustorsouza) + +Properly parse output of openssl on Windows #64 (akadko) + +Use the target of the pipe method also as its return value #67 (atd-schubert) + + ## 2.1.1 April 16, 2015 Update package.json with async dependency (tomasdev) diff --git a/package.json b/package.json index 988a472..d88032f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "passbook", "description": "iOS Passbook for the Node hacker", "homepage": "https://github.com/assaf/node-passbook", - "version": "2.1.2", + "version": "2.2.0", "author": { "name": "Assaf Arkin", "email": "assaf@labnotes.org" From 3070de1b31df7a61e0c8a24c1c76d7de9afe0208 Mon Sep 17 00:00:00 2001 From: Max Conradt Date: Mon, 11 Mar 2019 16:44:45 -0500 Subject: [PATCH 35/38] Fixed SHA signature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The file was not being signed properly, now it is. I couldn’t devise a test for this, because the error only occurs when I try to open the file. Running macOS HighSierra 10.13.6. Signed-off-by: Max Conradt --- lib/pass.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pass.js b/lib/pass.js index fd298b3..eb8b35b 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -18,7 +18,7 @@ var zlib = require("zlib"); var TOP_LEVEL = [ "appLaunchURL", "associatedStoreIdentifiers", "authenticationToken", "backgroundColor", "barcode", "description", "foregroundColor", "labelColor", "locations", "logoText", - "organizationName", "relevantDate", "serialNumber", + "organizationName", "relevantDate", "serialNumber", "suppressStripShine", "webServiceURL", "beacons"]; // These top level fields are required for a valid pass. var REQUIRED_TOP_LEVEL = [ "description", "organizationName", "passTypeIdentifier", @@ -140,7 +140,7 @@ Fields.prototype.add = function(key, label, value, options) { // key - Field key // label - Field label (optional) // value - Field value -// Other field options (e.g. dateStyle) +// Other field options (e.g. dateStyle) Fields.prototype.get = function(key) { var fields = this.pass.structure[this.key]; if (fields) { @@ -367,7 +367,7 @@ function signManifest(template, manifest, callback) { if (error || (trimmedStderr && trimmedStderr.indexOf('- done') < 0)) { callback(new Error(stderr)); } else { - var signature = stdout.split(/(\r\n|\n\n)/)[3]; + var signature = stdout.split(/(\r\n|\n\n)/)[6]; callback(null, Buffer.from(signature, "base64")); } }); From e4167fadd883f49c89713363d67912d4f374754b Mon Sep 17 00:00:00 2001 From: Ben Fletrix Date: Tue, 28 May 2019 17:37:42 +0800 Subject: [PATCH 36/38] Removed bracket in regex to fixed empty signature issue --- lib/pass.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pass.js b/lib/pass.js index fd298b3..24523bc 100644 --- a/lib/pass.js +++ b/lib/pass.js @@ -367,7 +367,7 @@ function signManifest(template, manifest, callback) { if (error || (trimmedStderr && trimmedStderr.indexOf('- done') < 0)) { callback(new Error(stderr)); } else { - var signature = stdout.split(/(\r\n|\n\n)/)[3]; + var signature = stdout.split(/\r\n|\n\n/)[3]; callback(null, Buffer.from(signature, "base64")); } }); From 934101028607899535bf7fce824698f416fcd72e Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Mon, 9 Sep 2019 09:09:48 -0700 Subject: [PATCH 37/38] Updated dependencies --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d88032f..275772c 100644 --- a/package.json +++ b/package.json @@ -12,12 +12,12 @@ "node-passbook": "./bin/node-passbook" }, "dependencies": { - "async": "^2.6.1", + "async": "^3.1.0", "cli": "^1.0.1", "follow-redirects": "^1.2.3" }, "devDependencies": { - "mocha": "^5.2.0" + "mocha": "^6.2.0" }, "scripts": { "test": "mocha" From dabc4cb97b55014f48f420b6f4b15577103fab1c Mon Sep 17 00:00:00 2001 From: Assaf Arkin Date: Mon, 9 Sep 2019 09:09:58 -0700 Subject: [PATCH 38/38] 2.3.0 --- CHANGELOG.md | 6 + package.json | 2 +- yarn.lock | 860 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 867 insertions(+), 1 deletion(-) create mode 100644 yarn.lock diff --git a/CHANGELOG.md b/CHANGELOG.md index 170f5c0..0e408d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.3.0 September 9, 2019 + +Fixed SHA signature #68/#70 (vodaben) + + + ## 2.2.0 November 25, 2015 Requires Node 6.x or later, due to changes to the `Buffer` class. diff --git a/package.json b/package.json index 275772c..4433f44 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "passbook", "description": "iOS Passbook for the Node hacker", "homepage": "https://github.com/assaf/node-passbook", - "version": "2.2.0", + "version": "2.3.0", "author": { "name": "Assaf Arkin", "email": "assaf@labnotes.org" diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..52893e7 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,860 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +ansi-colors@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +async@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.1.0.tgz#42b3b12ae1b74927b5217d8c0016baaf62463772" + integrity sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chalk@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +cli@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" + integrity sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ= + dependencies: + exit "0.1.2" + glob "^7.1.1" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +debug@3.2.6, debug@^3.0.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +es-abstract@^1.5.1: + version "1.14.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" + integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.0.0" + string.prototype.trimright "^2.0.0" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flat@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" + integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== + dependencies: + is-buffer "~2.0.3" + +follow-redirects@^1.2.3: + version "1.9.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" + integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A== + dependencies: + debug "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +glob@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + 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@^7.1.1: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + 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" + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +is-buffer@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" + integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== + +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-yaml@3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash@^4.17.11: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-symbols@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +mocha@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.0.tgz#f896b642843445d1bb8bca60eabd9206b8916e56" + integrity sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "2.2.0" + minimatch "3.0.4" + mkdirp "0.5.1" + ms "2.1.1" + node-environment-flags "1.0.5" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.2.2" + yargs-parser "13.0.0" + yargs-unparser "1.5.0" + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-environment-flags@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" + integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +os-locale@^3.0.0, os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +semver@^5.5.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trimleft@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz#68b6aa8e162c6a80e76e3a8a0c2e747186e271ff" + integrity sha1-aLaqjhYsaoDnbjqKDC50cYbicf8= + dependencies: + define-properties "^1.1.2" + function-bind "^1.0.2" + +string.prototype.trimright@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz#ab4a56d802a01fbe7293e11e84f24dc8164661dd" + integrity sha1-q0pW2AKgH75yk+EehPJNyBZGYd0= + dependencies: + define-properties "^1.1.2" + function-bind "^1.0.2" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== + dependencies: + has-flag "^3.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1.3.1, which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yargs-parser@13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.0.0.tgz#3fc44f3e76a8bdb1cc3602e860108602e5ccde8b" + integrity sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^13.0.0: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-unparser@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.5.0.tgz#f2bb2a7e83cbc87bb95c8e572828a06c9add6e0d" + integrity sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw== + dependencies: + flat "^4.1.0" + lodash "^4.17.11" + yargs "^12.0.5" + +yargs@13.2.2: + version "13.2.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.2.tgz#0c101f580ae95cea7f39d927e7770e3fdc97f993" + integrity sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA== + dependencies: + cliui "^4.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.0.0" + +yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1"