From bb9206bc4c863bfef4e1cffd213e5021c7ae6501 Mon Sep 17 00:00:00 2001 From: Branden Horiuchi Date: Tue, 22 Nov 2016 07:46:36 -0800 Subject: [PATCH 01/89] added cookie security --- src/security/CookieSecurity.js | 26 ++++++++++++++++++++++++++ src/security/index.js | 1 + 2 files changed, 27 insertions(+) create mode 100644 src/security/CookieSecurity.js diff --git a/src/security/CookieSecurity.js b/src/security/CookieSecurity.js new file mode 100644 index 00000000..0b74b7ed --- /dev/null +++ b/src/security/CookieSecurity.js @@ -0,0 +1,26 @@ +'use strict'; + +var _ = require('lodash'); +var Security = require('./security'); + +/* + * Accepts either a cookie or lastResponseHeaders + */ +class CookieSecurity extends Security { + constructor(cookie, options) { + super(options); + + cookie = _.isArray(cookie) ? cookie : [cookie] + var cookies = _.map(_.get(cookie, 'set-cookie', cookie), function (c) { + return c.split(';')[0]; + }) + + this.cookie = cookies.join('; '); + } + + addHttpHeaders(headers) { + headers.Cookie = this.cookie; + } +} + +module.exports = CookieSecurity; diff --git a/src/security/index.js b/src/security/index.js index 367e6e58..16ddb547 100644 --- a/src/security/index.js +++ b/src/security/index.js @@ -11,6 +11,7 @@ module.exports = { BasicAuthSecurity: require('./BasicAuthSecurity'), ClientSSLSecurity: require('./ClientSSLSecurity'), ClientSSLSecurityPFX: require('./ClientSSLSecurityPFX'), + CookieSecurity: require('./CookieSecurity'), WSSecurity: require('./WSSecurity'), BearerSecurity: require('./BearerSecurity'), WSSecurityCert: WSSecurityCert From d9e9a01cbb8e89afccc579a122377ebf86b9b40e Mon Sep 17 00:00:00 2001 From: Branden Horiuchi Date: Tue, 22 Nov 2016 07:51:53 -0800 Subject: [PATCH 02/89] fixing header parse objects would not have been parsed --- src/security/CookieSecurity.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/security/CookieSecurity.js b/src/security/CookieSecurity.js index 0b74b7ed..fe1926dc 100644 --- a/src/security/CookieSecurity.js +++ b/src/security/CookieSecurity.js @@ -10,8 +10,7 @@ class CookieSecurity extends Security { constructor(cookie, options) { super(options); - cookie = _.isArray(cookie) ? cookie : [cookie] - var cookies = _.map(_.get(cookie, 'set-cookie', cookie), function (c) { + var cookies = _.map(_.get(cookie, 'set-cookie', _.isArray(cookie) ? cookie : [cookie]), function (c) { return c.split(';')[0]; }) From 362da75f53d7d23f9b36f76f6914ca326e3cc671 Mon Sep 17 00:00:00 2001 From: Branden Horiuchi Date: Tue, 22 Nov 2016 07:55:35 -0800 Subject: [PATCH 03/89] better cookie parsing handle the case where the header for set-cookie is a string and not an array --- src/security/CookieSecurity.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/security/CookieSecurity.js b/src/security/CookieSecurity.js index fe1926dc..12f858f3 100644 --- a/src/security/CookieSecurity.js +++ b/src/security/CookieSecurity.js @@ -10,7 +10,8 @@ class CookieSecurity extends Security { constructor(cookie, options) { super(options); - var cookies = _.map(_.get(cookie, 'set-cookie', _.isArray(cookie) ? cookie : [cookie]), function (c) { + cookie = _.get(cookie, 'set-cookie', cookie) + var cookies = _.map(_.isArray(cookie) ? cookie : [cookie], function (c) { return c.split(';')[0]; }) From deb5df8f60112dd943169028e17df74e1ca6fbf0 Mon Sep 17 00:00:00 2001 From: Branden Horiuchi Date: Wed, 30 Nov 2016 14:45:18 -0800 Subject: [PATCH 04/89] added CookieSecurity test --- test/security/CookieSecurity.js | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 test/security/CookieSecurity.js diff --git a/test/security/CookieSecurity.js b/test/security/CookieSecurity.js new file mode 100644 index 00000000..934ddfab --- /dev/null +++ b/test/security/CookieSecurity.js @@ -0,0 +1,42 @@ +'use strict'; + +describe('CookieSecurity', function() { + var CookieSecurity = require('../../').CookieSecurity; + var cookie = "cookie-value"; + var headers = { + 'set-cookie': [ + cookie + ] + }; + + it('is a function', function() { + CookieSecurity.should.be.type('function'); + }); + + describe('cookie value', function () { + var instance1 = new CookieSecurity(cookie); + var instance2 = new CookieSecurity(headers); + + it('is accepted with cookie string', function () { + instance1.should.have.property("cookie", cookie); + }); + + it('is accepted with last header', function () { + instance2.should.have.property("cookie", cookie); + }); + }); + + describe('defaultOption param', function() { + it('is accepted as the second param', function() { + new CookieSecurity(cookie, {}); + }); + + it('is used in addOptions', function() { + var options = {}; + var defaultOptions = { foo: 2 }; + var instance = new CookieSecurity(cookie, defaultOptions); + instance.addOptions(options); + options.should.have.property("foo", 2); + }); + }); +}); From b47ac96a49346d7b8f41e7b7da446e5cfd8dfa45 Mon Sep 17 00:00:00 2001 From: Branden Horiuchi Date: Tue, 13 Dec 2016 11:44:26 -0800 Subject: [PATCH 05/89] removed lodash dependency changed double to single quotes in tests --- src/security/CookieSecurity.js | 14 ++++++++------ test/security/CookieSecurity.js | 8 ++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/security/CookieSecurity.js b/src/security/CookieSecurity.js index 12f858f3..6f7fb096 100644 --- a/src/security/CookieSecurity.js +++ b/src/security/CookieSecurity.js @@ -1,8 +1,11 @@ 'use strict'; -var _ = require('lodash'); var Security = require('./security'); +function hasCookieHeader (cookie) { + return typeof cookie === 'object' && cookie.hasOwnProperty('set-cookie') +} + /* * Accepts either a cookie or lastResponseHeaders */ @@ -10,12 +13,11 @@ class CookieSecurity extends Security { constructor(cookie, options) { super(options); - cookie = _.get(cookie, 'set-cookie', cookie) - var cookies = _.map(_.isArray(cookie) ? cookie : [cookie], function (c) { - return c.split(';')[0]; - }) + cookie = hasCookieHeader(cookie) ? cookie['set-cookie'] : cookie - this.cookie = cookies.join('; '); + this.cookie = (Array.isArray(cookie) ? cookie : [cookie]) + .map(c => c.split(';')[0]) + .join('; '); } addHttpHeaders(headers) { diff --git a/test/security/CookieSecurity.js b/test/security/CookieSecurity.js index 934ddfab..28fba40a 100644 --- a/test/security/CookieSecurity.js +++ b/test/security/CookieSecurity.js @@ -2,7 +2,7 @@ describe('CookieSecurity', function() { var CookieSecurity = require('../../').CookieSecurity; - var cookie = "cookie-value"; + var cookie = 'cookie-value'; var headers = { 'set-cookie': [ cookie @@ -18,11 +18,11 @@ describe('CookieSecurity', function() { var instance2 = new CookieSecurity(headers); it('is accepted with cookie string', function () { - instance1.should.have.property("cookie", cookie); + instance1.should.have.property('cookie', cookie); }); it('is accepted with last header', function () { - instance2.should.have.property("cookie", cookie); + instance2.should.have.property('cookie', cookie); }); }); @@ -36,7 +36,7 @@ describe('CookieSecurity', function() { var defaultOptions = { foo: 2 }; var instance = new CookieSecurity(cookie, defaultOptions); instance.addOptions(options); - options.should.have.property("foo", 2); + options.should.have.property('foo', 2); }); }); }); From 8c8ba62252ca3ced2f4085c5276517758693fb73 Mon Sep 17 00:00:00 2001 From: Branden Horiuchi Date: Tue, 13 Dec 2016 11:49:16 -0800 Subject: [PATCH 06/89] missing semi colons --- src/security/CookieSecurity.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/security/CookieSecurity.js b/src/security/CookieSecurity.js index 6f7fb096..824aa681 100644 --- a/src/security/CookieSecurity.js +++ b/src/security/CookieSecurity.js @@ -3,7 +3,7 @@ var Security = require('./security'); function hasCookieHeader (cookie) { - return typeof cookie === 'object' && cookie.hasOwnProperty('set-cookie') + return typeof cookie === 'object' && cookie.hasOwnProperty('set-cookie'); } /* @@ -13,7 +13,7 @@ class CookieSecurity extends Security { constructor(cookie, options) { super(options); - cookie = hasCookieHeader(cookie) ? cookie['set-cookie'] : cookie + cookie = hasCookieHeader(cookie) ? cookie['set-cookie'] : cookie; this.cookie = (Array.isArray(cookie) ? cookie : [cookie]) .map(c => c.split(';')[0]) From 2118f5eb3ce8c1120f1e32356558019133cd947d Mon Sep 17 00:00:00 2001 From: Tom Hodder Date: Tue, 12 Dec 2017 18:48:18 +0000 Subject: [PATCH 07/89] Updated passwordDigest method and related tests --- src/utils.js | 14 ++++- test/security/WSSecurity.js | 109 ++++++++++++++++++++++++++++++++++-- 2 files changed, 116 insertions(+), 7 deletions(-) diff --git a/src/utils.js b/src/utils.js index e8d0a2bd..af0b4529 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,7 +1,7 @@ 'use strict'; var crypto = require('crypto'); -exports.passwordDigest = function passwordDigest(nonce, created, password) { +exports.passwordDigestOriginal = function passwordDigest(nonce, created, password) { // digest = base64 ( sha1 ( nonce + created + password ) ) var pwHash = crypto.createHash('sha1'); var rawNonce = new Buffer(nonce || '', 'base64').toString('binary'); @@ -9,6 +9,18 @@ exports.passwordDigest = function passwordDigest(nonce, created, password) { return pwHash.digest('base64'); }; +exports.passwordDigest = function (nonce, created, password) { + // digest = base64 ( sha1 ( nonce + created + password ) ) + var pwHash = crypto.createHash('sha1'); + var rawNonce = new Buffer(nonce || '', 'base64'); + pwHash.update(Buffer.concat([ + rawNonce, + new Buffer(created), + new Buffer(password) + ])); + return pwHash.digest('base64'); +}; + var TNS_PREFIX = ''; // Prefix for targetNamespace exports.TNS_PREFIX = TNS_PREFIX; diff --git a/test/security/WSSecurity.js b/test/security/WSSecurity.js index b2c5d17b..8c0f6ea1 100644 --- a/test/security/WSSecurity.js +++ b/test/security/WSSecurity.js @@ -4,14 +4,24 @@ var fs = require('fs'), join = require('path').join; var XMLHandler = require('../../lib/parser/xmlHandler'); -describe('WSSecurity', function() { +var crypto = require("crypto"); +var passwordDigest = require('../../src/utils').passwordDigest; +var passwordDigestOriginal = require('../../src/utils').passwordDigestOriginal; + +function createNonce(created){ + var nHash = crypto.createHash('sha1'); + nHash.update(created + Math.random()); + return nHash.digest('base64'); +} + +describe('WSSecurity', function () { var WSSecurity = require('../../').WSSecurity; - it('is a function', function() { + it('is a function', function () { WSSecurity.should.be.type('function'); }); - it('should accept valid constructor variables', function() { + it('should accept valid constructor variables', function () { var username = 'myUser'; var password = 'myPass'; var options = { @@ -27,7 +37,7 @@ describe('WSSecurity', function() { instance.should.have.property('_actor', options.actor); }); - it('should accept passwordType as 3rd arg', function() { + it('should accept passwordType as 3rd arg', function () { var username = 'myUser'; var password = 'myPass'; var passwordType = 'PasswordText'; @@ -39,7 +49,7 @@ describe('WSSecurity', function() { instance.should.not.have.property('_actor'); }); - it('should insert a WSSecurity when postProcess is called', function() { + it('should insert a WSSecurity when postProcess is called', function () { var env = XMLHandler.createSOAPEnvelope(); var username = 'myUser'; var password = 'myPass'; @@ -50,7 +60,9 @@ describe('WSSecurity', function() { }; var instance = new WSSecurity(username, password, options); instance.addSoapHeaders(env.header); - var xml = env.header.toString({pretty: true}); + var xml = env.header.toString({ + pretty: true + }); xml.should.containEql(''); xml.should.containEql(''); + }); + + it('test WSSecurity digest against SoapUI 5.4 output', function () { + var username = 'myUser'; + var password = 'myPass'; + var created = ''; + var nonce = ''; + var digest = ''; + + /** + * example passwordDigest created using SoapUI version 5.4.0 + * UsernameToken generated by SoapUI with given username/password: + + + myUser + yangN8zaHDO1j9wLGjwzWTaY/6o= + hdk9vWPwQ37Y5O2hICiOgQ== + 2017-12-12T18:17:39.348Z + + + */ + created = '2017-12-12T18:17:39.348Z'; + nonce = 'hdk9vWPwQ37Y5O2hICiOgQ==' + digest = 'yangN8zaHDO1j9wLGjwzWTaY/6o=' + + passwordDigest(nonce, created, password).should.containEql(digest); + + }); + + + it('test WSSecurity digest against Boomerang 3.4.1 output', function () { + var username = 'myUser'; + var password = 'myPass'; + var created = ''; + var nonce = ''; + var digest = ''; + + /** + * example passwordDigest created using Boomerang 3.4.1 + * UsernameToken generated by boomerang with given username/password: + https://chrome.google.com/webstore/detail/boomerang-soap-rest-clien/eipdnjedkpcnlmmdfdkgfpljanehloah/reviews + + + myUser + 5gHmXk5jplZPkcFFkvp0MBowUbg= + MTUxMzEwNDAyNDEwODAwMA== + 2017-12-12T18:40:24.108Z + + + */ + created = '2017-12-12T18:40:24.108Z'; + nonce = 'MTUxMzEwNDAyNDEwODAwMA==' + digest = '5gHmXk5jplZPkcFFkvp0MBowUbg=' + + passwordDigest(nonce, created, password).should.containEql(digest); + + }); + + + + it('Original WSSecurity digest method against SoapUI 5.4 output', function () { + var username = 'myUser'; + var password = 'myPass'; + var created = ''; + var nonce = ''; + var digest = ''; + + /** + * example passwordDigest created using SoapUI version 5.4.0 + * UsernameToken generated by SoapUI with given username/password: + + + myUser + yangN8zaHDO1j9wLGjwzWTaY/6o= + hdk9vWPwQ37Y5O2hICiOgQ== + 2017-12-12T18:17:39.348Z + + + */ + created = '2017-12-12T18:17:39.348Z'; + nonce = 'hdk9vWPwQ37Y5O2hICiOgQ==' + digest = 'yangN8zaHDO1j9wLGjwzWTaY/6o=' + + passwordDigestOriginal(nonce, created, password).should.containEql(digest); + }); }); From aa2ec34f025dcd58976b9053db38d430327708fd Mon Sep 17 00:00:00 2001 From: Tom Hodder Date: Tue, 12 Dec 2017 19:01:03 +0000 Subject: [PATCH 08/89] revert formatting changes by format on save in vscode --- test/security/WSSecurity.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/test/security/WSSecurity.js b/test/security/WSSecurity.js index 8c0f6ea1..ac52d211 100644 --- a/test/security/WSSecurity.js +++ b/test/security/WSSecurity.js @@ -4,7 +4,6 @@ var fs = require('fs'), join = require('path').join; var XMLHandler = require('../../lib/parser/xmlHandler'); -var crypto = require("crypto"); var passwordDigest = require('../../src/utils').passwordDigest; var passwordDigestOriginal = require('../../src/utils').passwordDigestOriginal; @@ -17,11 +16,11 @@ function createNonce(created){ describe('WSSecurity', function () { var WSSecurity = require('../../').WSSecurity; - it('is a function', function () { + it('is a function', function() { WSSecurity.should.be.type('function'); }); - it('should accept valid constructor variables', function () { + it('should accept valid constructor variables', function() { var username = 'myUser'; var password = 'myPass'; var options = { @@ -37,7 +36,7 @@ describe('WSSecurity', function () { instance.should.have.property('_actor', options.actor); }); - it('should accept passwordType as 3rd arg', function () { + it('should accept passwordType as 3rd arg', function() { var username = 'myUser'; var password = 'myPass'; var passwordType = 'PasswordText'; @@ -49,7 +48,7 @@ describe('WSSecurity', function () { instance.should.not.have.property('_actor'); }); - it('should insert a WSSecurity when postProcess is called', function () { + it('should insert a WSSecurity when postProcess is called', function() { var env = XMLHandler.createSOAPEnvelope(); var username = 'myUser'; var password = 'myPass'; @@ -60,10 +59,8 @@ describe('WSSecurity', function () { }; var instance = new WSSecurity(username, password, options); instance.addSoapHeaders(env.header); - var xml = env.header.toString({ - pretty: true - }); - + var xml = env.header.toString({pretty: true}); + xml.should.containEql(' - - - - - - 100 - - - - Another Address - - - My Address - - - - - - 123 - - - - - 456 - - - - - - - \ No newline at end of file + + + + + + 100 + + + + + 123 + + + + + 456 + + + + + + Another Address + + + My Address + + + + + + diff --git a/test/request-response-samples/UpdateProfile__correct_namespaces_for_elements_with_base_ignorednamespaces/request.xml b/test/request-response-samples/UpdateProfile__correct_namespaces_for_elements_with_base_ignorednamespaces/request.xml index 800d9742..b9702a28 100644 --- a/test/request-response-samples/UpdateProfile__correct_namespaces_for_elements_with_base_ignorednamespaces/request.xml +++ b/test/request-response-samples/UpdateProfile__correct_namespaces_for_elements_with_base_ignorednamespaces/request.xml @@ -1,33 +1,33 @@ - - - - - - 100 - - - - Another Address - - - My Address - - - - - - 123 - - - - - 456 - - - - - - - \ No newline at end of file + + + + + + 100 + + + + + 123 + + + + + 456 + + + + + + Another Address + + + My Address + + + + + + diff --git a/test/request-response-samples/UpdateProfile__correct_ns_context/request.xml b/test/request-response-samples/UpdateProfile__correct_ns_context/request.xml index caa0e3d9..b623e421 100644 --- a/test/request-response-samples/UpdateProfile__correct_ns_context/request.xml +++ b/test/request-response-samples/UpdateProfile__correct_ns_context/request.xml @@ -1,39 +1,39 @@ - - - - - - 100 - 100 - 100 - - - - Another Address - - - My Address - - - - - - 400123 - - - 1001 - 377 - - - - - 555010456 - - - - - - - \ No newline at end of file + + + + + + 100 + 100 + 100 + + + + + 400123 + + + 1001 + 377 + + + + + 555010456 + + + + + + Another Address + + + My Address + + + + + + diff --git a/test/request-response-samples/update__complex_extension_with_array_attributes/request.xml b/test/request-response-samples/update__complex_extension_with_array_attributes/request.xml index 374770a0..d74655d9 100644 --- a/test/request-response-samples/update__complex_extension_with_array_attributes/request.xml +++ b/test/request-response-samples/update__complex_extension_with_array_attributes/request.xml @@ -1,31 +1,46 @@ - - - - - - Allister - Sullivan - - officephone - mobilephone - - 800-555-2819 - - - true - - Billing Communication - - - - true - - Marketing - - - - - - + + + + + + + officephone + mobilephone + + Allister + Sullivan + 800-555-2819 + + + true + + Billing Communication + + + + true + + Marketing + + + + + + \ No newline at end of file diff --git a/test/wsdl/typeref/request.xml.js b/test/wsdl/typeref/request.xml.js index 69c31a6a..80f0708a 100755 --- a/test/wsdl/typeref/request.xml.js +++ b/test/wsdl/typeref/request.xml.js @@ -6,12 +6,12 @@ module.exports = '001\n '+ '\n '+ '\n '+ - '100\n '+ - 'item01\n '+ + 'item01\n '+ + '100\n '+ '\n '+ '\n '+ - '50\n '+ - 'item02\n '+ + 'item02\n '+ + '50\n '+ '\n '+ '\n '+ '\n'+ From a42f810be7200b53ec85358864338466cea53656 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Wed, 31 Jan 2018 12:37:51 -0800 Subject: [PATCH 12/89] fix: upgrade deps --- package.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 20de39b6..77e342b7 100644 --- a/package.json +++ b/package.json @@ -7,18 +7,18 @@ }, "dependencies": { "compress": "^0.99.0", - "debug": "^2.2.0", + "debug": "^3.1.0", + "httpntlm": "^1.6.1", "lodash": "^4.13.1", - "uuid": "^3.0.0", "optional": "^0.1.3", "path": "^0.12.7", "request": "^2.72.0", "sax": "^1.2", "selectn": "^1.0.20", "strong-globalize": "^2.8.0", - "xml-crypto": "^0.8.4", - "xmlbuilder": "^8.2.2", - "httpntlm": "^1.6.1" + "uuid": "^3.2.1", + "xml-crypto": "^0.10.1", + "xmlbuilder": "^9.0.4" }, "optionalDependencies": { "ursa": "^0.9.4" @@ -32,10 +32,10 @@ "lib": "./lib" }, "scripts": { - "toc": "./node_modules/.bin/doctoc Readme.md --github --maxlevel 3", + "toc": "doctoc Readme.md --github --maxlevel 3", "_pretest": "jshint index.js lib test", "coveralls": "nyc report --reporter=text-lcov | coveralls -v", - "test": "nyc mocha --timeout 60000 test/*-test.js test/security/*.js", + "test": "nyc mocha --exit --timeout 60000 test/*-test.js test/security/*.js", "citest": "npm test", "postcitest": "npm run coveralls", "pretest": "babel src -d lib", @@ -50,19 +50,19 @@ "babel-cli": "^6.9.0", "babel-preset-es2015": "^6.9.0", "colors": "^1.1.2", - "coveralls": "^2.11.9", - "diff": "^2.2.3", + "coveralls": "^3.0.0", + "diff": "^3.4.0", "doctoc": "^1.1.1", "duplexer": "^0.1.1", "eslint": "^3.4.0", "eslint-config-google": "^0.6.0", "glob": "^7.0.3", "jshint": "2.9.2", - "mocha": "^2.5.3", - "nyc": "^10.0.0", + "mocha": "^5.0.0", + "nyc": "^11.4.1", "readable-stream": "^2.1.4", "semver": "^5.1.0", "should": "^9.0.0", - "timekeeper": "^0.0.5" + "timekeeper": "^2.0.0" } } From 6609d1e9245982af78c3875729137459cae416db Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Wed, 31 Jan 2018 12:43:34 -0800 Subject: [PATCH 13/89] 1.5.0 * fix: upgrade deps (Raymond Feng) * fix: make sure xml elements are mapped based the order of xsd (Raymond Feng) * Fix Typo: RPC Literal (Thomas Richter) * check the original passwordDigest method fails against SoapUI output (Tom Hodder) * revert formatting changes by format on save in vscode (Tom Hodder) * Updated passwordDigest method and related tests (Tom Hodder) * missing semi colons (Branden Horiuchi) * removed lodash dependency (Branden Horiuchi) * added CookieSecurity test (Branden Horiuchi) * better cookie parsing handle the case where the header for set-cookie is a string and not an array (Branden Horiuchi) * fixing header parse objects would not have been parsed (Branden Horiuchi) * added cookie security (Branden Horiuchi) --- CHANGES.md | 28 ++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index a4625191..f152b1f3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,31 @@ +2018-01-31, Version 1.5.0 +========================= + + * fix: upgrade deps (Raymond Feng) + + * fix: make sure xml elements are mapped based the order of xsd (Raymond Feng) + + * Fix Typo: RPC Literal (Thomas Richter) + + * check the original passwordDigest method fails against SoapUI output (Tom Hodder) + + * revert formatting changes by format on save in vscode (Tom Hodder) + + * Updated passwordDigest method and related tests (Tom Hodder) + + * missing semi colons (Branden Horiuchi) + + * removed lodash dependency (Branden Horiuchi) + + * added CookieSecurity test (Branden Horiuchi) + + * better cookie parsing handle the case where the header for set-cookie is a string and not an array (Branden Horiuchi) + + * fixing header parse objects would not have been parsed (Branden Horiuchi) + + * added cookie security (Branden Horiuchi) + + 2018-01-24, Version 1.4.2 ========================= diff --git a/package.json b/package.json index 77e342b7..e94df76b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.4.2", + "version": "1.5.0", "description": "A minimal node SOAP client", "engines": { "node": ">=4.0" From 6d57751a5f55a833691f03f5e05150e4791647d0 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 15 Mar 2018 10:43:58 -0700 Subject: [PATCH 14/89] chore: clean up deps --- .babelrc | 13 ++++++++++++- package.json | 16 ++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/.babelrc b/.babelrc index 9d8d5165..be77a6c0 100644 --- a/.babelrc +++ b/.babelrc @@ -1 +1,12 @@ -{ "presets": ["es2015"] } +{ + "presets": [ + [ + "env", + { + "targets": { + "node": "4.0.0" + } + } + ] + ] +} diff --git a/package.json b/package.json index e94df76b..14d20009 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "request": "^2.72.0", "sax": "^1.2", "selectn": "^1.0.20", - "strong-globalize": "^2.8.0", + "strong-globalize": "^3.2.0", "uuid": "^3.2.1", "xml-crypto": "^0.10.1", "xmlbuilder": "^9.0.4" @@ -39,7 +39,7 @@ "citest": "npm test", "postcitest": "npm run coveralls", "pretest": "babel src -d lib", - "prepublish": "babel src -d lib" + "prepare": "babel src -d lib" }, "keywords": [ "soap" @@ -48,21 +48,21 @@ "devDependencies": { "async": "^2.0.1", "babel-cli": "^6.9.0", - "babel-preset-es2015": "^6.9.0", + "babel-preset-env": "^1.6.1", "colors": "^1.1.2", "coveralls": "^3.0.0", "diff": "^3.4.0", - "doctoc": "^1.1.1", + "doctoc": "^1.3.1", "duplexer": "^0.1.1", - "eslint": "^3.4.0", - "eslint-config-google": "^0.6.0", + "eslint": "^4.18.2", + "eslint-config-google": "^0.9.1", "glob": "^7.0.3", - "jshint": "2.9.2", + "jshint": "^2.9.5", "mocha": "^5.0.0", "nyc": "^11.4.1", "readable-stream": "^2.1.4", "semver": "^5.1.0", - "should": "^9.0.0", + "should": "^13.2.1", "timekeeper": "^2.0.0" } } From 2000876981f3827546a6f15b1304beb9b6f4fe02 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 15 Mar 2018 10:45:00 -0700 Subject: [PATCH 15/89] fix: improve wsdl types processing for multiple schemas See https://github.com/strongloop/strong-soap/issues/146 --- src/parser/wsdl.js | 4 + src/parser/wsdl/types.js | 6 +- src/parser/xsd/schema.js | 3 +- test/wsdl-parse-test.js | 12 ++ .../wsdl/types-with-schemas/wsdl_service.wsdl | 138 ++++++++++++++++++ test/wsdl/types-with-schemas/xsd_error.xsd | 20 +++ test/wsdl/types-with-schemas/xsd_types1.xsd | 47 ++++++ test/wsdl/types-with-schemas/xsd_types2.xsd | 43 ++++++ 8 files changed, 269 insertions(+), 4 deletions(-) create mode 100755 test/wsdl/types-with-schemas/wsdl_service.wsdl create mode 100755 test/wsdl/types-with-schemas/xsd_error.xsd create mode 100755 test/wsdl/types-with-schemas/xsd_types1.xsd create mode 100755 test/wsdl/types-with-schemas/xsd_types2.xsd diff --git a/src/parser/wsdl.js b/src/parser/wsdl.js index 53851929..339f0328 100644 --- a/src/parser/wsdl.js +++ b/src/parser/wsdl.js @@ -9,6 +9,7 @@ var path = require('path'); var assert = require('assert'); var stripBom = require('../strip-bom'); var debug = require('debug')('strong-soap:wsdl'); +var debugInclude = require('debug')('strong-soap:wsdl:include'); var _ = require('lodash'); var selectn = require('selectn'); var utils = require('./helper'); @@ -149,6 +150,7 @@ class WSDL { } _processNextInclude(includes, callback) { + debugInclude('includes/imports: ', includes); var self = this, include = includes.shift(), options; @@ -163,6 +165,8 @@ class WSDL { includePath = url.resolve(self.uri, include.location); } + debugInclude('Processing: ', include, includePath); + options = _.assign({}, this.options); // follow supplied ignoredNamespaces option options.ignoredNamespaces = this._originalIgnoredNamespaces || this.options.ignoredNamespaces; diff --git a/src/parser/wsdl/types.js b/src/parser/wsdl/types.js index 4c570fd8..818f832a 100644 --- a/src/parser/wsdl/types.js +++ b/src/parser/wsdl/types.js @@ -1,6 +1,5 @@ 'use strict'; -var g = require('../../globalize'); var WSDLElement = require('./wsdlElement'); var assert = require('assert'); var Schema = require('../xsd/schema'); @@ -19,8 +18,9 @@ class Types extends WSDLElement { if (!this.schemas.hasOwnProperty(targetNamespace)) { this.schemas[targetNamespace] = child; } else { - g.error('Target namespace "%s" already in use by another Schema', - targetNamespace); + // types might have multiple schemas with the same target namespace, + // including no target namespace + this.schemas[targetNamespace].merge(child, true); } }; } diff --git a/src/parser/xsd/schema.js b/src/parser/xsd/schema.js index 8d10811f..80208d03 100644 --- a/src/parser/xsd/schema.js +++ b/src/parser/xsd/schema.js @@ -21,7 +21,7 @@ class Schema extends XSDElement { merge(source, isInclude) { assert(source instanceof Schema); if (this.$targetNamespace === source.$targetNamespace || - // xsd:include allows the target schema that does not have targetNamspace + // xsd:include allows the target schema that does not have targetNamespace (isInclude && source.$targetNamespace === undefined)) { _.merge(this.complexTypes, source.complexTypes); _.merge(this.simpleTypes, source.simpleTypes); @@ -30,6 +30,7 @@ class Schema extends XSDElement { _.merge(this.attributes, source.attributes); _.merge(this.attributeGroups, source.attributeGroups); _.merge(this.xmlns, source.xmlns); + this.includes = this.includes.concat(source.includes); } return this; } diff --git a/test/wsdl-parse-test.js b/test/wsdl-parse-test.js index 76a80760..752e9081 100644 --- a/test/wsdl-parse-test.js +++ b/test/wsdl-parse-test.js @@ -60,4 +60,16 @@ describe(__filename, function() { done(); }); }); + + it('should parse types with same or no target namespaces', function(done) { + openWSDL(path.resolve(__dirname, 'wsdl/types-with-schemas/wsdl_service.wsdl'), + function(err, def) { + var schemas = def.definitions.schemas; + assert.deepEqual(Object.keys(schemas), [ 'undefined', + 'http://company.de/cake/synonymelisten/webservice', + 'http://company.de/cake/synonymelisten', + 'http://company.de/cake/synonymelisten/webservice/exceptions' ]); + done(); + }); + }); }); diff --git a/test/wsdl/types-with-schemas/wsdl_service.wsdl b/test/wsdl/types-with-schemas/wsdl_service.wsdl new file mode 100755 index 00000000..ec187c1a --- /dev/null +++ b/test/wsdl/types-with-schemas/wsdl_service.wsdl @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/types-with-schemas/xsd_error.xsd b/test/wsdl/types-with-schemas/xsd_error.xsd new file mode 100755 index 00000000..cd50b913 --- /dev/null +++ b/test/wsdl/types-with-schemas/xsd_error.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/types-with-schemas/xsd_types1.xsd b/test/wsdl/types-with-schemas/xsd_types1.xsd new file mode 100755 index 00000000..78007bd9 --- /dev/null +++ b/test/wsdl/types-with-schemas/xsd_types1.xsd @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/types-with-schemas/xsd_types2.xsd b/test/wsdl/types-with-schemas/xsd_types2.xsd new file mode 100755 index 00000000..032a3bdf --- /dev/null +++ b/test/wsdl/types-with-schemas/xsd_types2.xsd @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 09c894aa0c994ba9079b5c1aea065a9a2395fd60 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Fri, 16 Mar 2018 08:47:11 -0700 Subject: [PATCH 16/89] 1.6.0 * fix: improve wsdl types processing for multiple schemas (Raymond Feng) * chore: clean up deps (Raymond Feng) --- CHANGES.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index f152b1f3..fee996e2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,11 @@ +2018-03-16, Version 1.6.0 +========================= + + * fix: improve wsdl types processing for multiple schemas (Raymond Feng) + + * chore: clean up deps (Raymond Feng) + + 2018-01-31, Version 1.5.0 ========================= diff --git a/package.json b/package.json index 14d20009..f011188a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.5.0", + "version": "1.6.0", "description": "A minimal node SOAP client", "engines": { "node": ">=4.0" From 8659d7d935f3abeb304bc5431a8fa8059da54620 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Fri, 16 Mar 2018 08:48:34 -0700 Subject: [PATCH 17/89] build: drop node 4.x support --- .babelrc | 2 +- .travis.yml | 1 - package.json | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.babelrc b/.babelrc index be77a6c0..f1466a3e 100644 --- a/.babelrc +++ b/.babelrc @@ -4,7 +4,7 @@ "env", { "targets": { - "node": "4.0.0" + "node": "6.0.0" } } ] diff --git a/.travis.yml b/.travis.yml index beb356dd..8a1e8870 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,6 @@ language: node_js notifications: email: false node_js: - - '4' - '6' - '8' env: diff --git a/package.json b/package.json index f011188a..87e5974d 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "1.6.0", "description": "A minimal node SOAP client", "engines": { - "node": ">=4.0" + "node": ">=6.0" }, "dependencies": { "compress": "^0.99.0", From 25cb66b05d4ed58ba9c674a7c09a2eb260d8ca2f Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 19 Mar 2018 08:52:36 -0700 Subject: [PATCH 18/89] fix: add array check for concat --- src/parser/xsd/schema.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/parser/xsd/schema.js b/src/parser/xsd/schema.js index 80208d03..eb77fa9b 100644 --- a/src/parser/xsd/schema.js +++ b/src/parser/xsd/schema.js @@ -30,7 +30,9 @@ class Schema extends XSDElement { _.merge(this.attributes, source.attributes); _.merge(this.attributeGroups, source.attributeGroups); _.merge(this.xmlns, source.xmlns); - this.includes = this.includes.concat(source.includes); + if (Array.isArray(source.includes)) { + this.includes = this.includes.concat(source.includes); + } } return this; } From 43d3c7121809d32f274b71836b37ec593959fbbb Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 19 Mar 2018 08:58:38 -0700 Subject: [PATCH 19/89] 1.6.1 * fix: add array check for concat (Raymond Feng) * build: drop node 4.x support (Raymond Feng) --- CHANGES.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index fee996e2..db8313df 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,11 @@ +2018-03-19, Version 1.6.1 +========================= + + * fix: add array check for concat (Raymond Feng) + + * build: drop node 4.x support (Raymond Feng) + + 2018-03-16, Version 1.6.0 ========================= diff --git a/package.json b/package.json index 87e5974d..42c06507 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.6.0", + "version": "1.6.1", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From bb5b7164a622c248d6e85e969dabdb0f3b5d0fe7 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Tue, 20 Mar 2018 13:24:24 -0700 Subject: [PATCH 20/89] fix xsd include/import recursive processing See https://github.com/strongloop/strong-soap/issues/149 --- src/parser/wsdl.js | 3 + src/parser/wsdl/operation.js | 8 +- src/parser/wsdl/parameter.js | 14 +- src/parser/xsd/schema.js | 3 +- test/wsdl-parse-test.js | 127 ++++++++++++------ .../AccountingUnit.xsd | 12 ++ .../recursive-schema-import/Arrangement.xsd | 20 +++ .../recursive-schema-import/Authorization.xsd | 21 +++ .../BusinessDirectionItem.xsd | 15 +++ test/wsdl/recursive-schema-import/Channel.xsd | 16 +++ test/wsdl/recursive-schema-import/Common.xsd | 11 ++ .../recursive-schema-import/Communication.xsd | 22 +++ test/wsdl/recursive-schema-import/Event.xsd | 19 +++ .../Infrastructure.xsd | 9 ++ .../InfrastructureSOAP.xsd | 11 ++ .../InfrastructureSOAPSecurityHeader.xsd | 11 ++ .../wsdl/recursive-schema-import/Location.xsd | 12 ++ test/wsdl/recursive-schema-import/Product.xsd | 18 +++ .../recursive-schema-import/ResourceItem.xsd | 15 +++ test/wsdl/recursive-schema-import/TEST.xsd | 11 ++ .../TESTAdditionalHeaders.xsd | 10 ++ .../recursive-schema-import/TestFunction.xsd | 14 ++ .../TestFunctionManagement.wsdl | 66 +++++++++ .../TestFunctionManagement.xsd | 44 ++++++ 24 files changed, 464 insertions(+), 48 deletions(-) create mode 100755 test/wsdl/recursive-schema-import/AccountingUnit.xsd create mode 100755 test/wsdl/recursive-schema-import/Arrangement.xsd create mode 100755 test/wsdl/recursive-schema-import/Authorization.xsd create mode 100755 test/wsdl/recursive-schema-import/BusinessDirectionItem.xsd create mode 100755 test/wsdl/recursive-schema-import/Channel.xsd create mode 100755 test/wsdl/recursive-schema-import/Common.xsd create mode 100755 test/wsdl/recursive-schema-import/Communication.xsd create mode 100755 test/wsdl/recursive-schema-import/Event.xsd create mode 100755 test/wsdl/recursive-schema-import/Infrastructure.xsd create mode 100755 test/wsdl/recursive-schema-import/InfrastructureSOAP.xsd create mode 100755 test/wsdl/recursive-schema-import/InfrastructureSOAPSecurityHeader.xsd create mode 100755 test/wsdl/recursive-schema-import/Location.xsd create mode 100755 test/wsdl/recursive-schema-import/Product.xsd create mode 100755 test/wsdl/recursive-schema-import/ResourceItem.xsd create mode 100755 test/wsdl/recursive-schema-import/TEST.xsd create mode 100755 test/wsdl/recursive-schema-import/TESTAdditionalHeaders.xsd create mode 100755 test/wsdl/recursive-schema-import/TestFunction.xsd create mode 100755 test/wsdl/recursive-schema-import/TestFunctionManagement.wsdl create mode 100755 test/wsdl/recursive-schema-import/TestFunctionManagement.xsd diff --git a/src/parser/wsdl.js b/src/parser/wsdl.js index 339f0328..653887b3 100644 --- a/src/parser/wsdl.js +++ b/src/parser/wsdl.js @@ -189,6 +189,9 @@ class WSDL { } } _.mergeWith(self.definitions, wsdl.definitions, function(a, b) { + if (a === b) { + return a; + } return (a instanceof Schema) ? a.merge(b, include.type === 'include') : undefined; }); } else { diff --git a/src/parser/wsdl/operation.js b/src/parser/wsdl/operation.js index 0c347587..a0cc114e 100644 --- a/src/parser/wsdl/operation.js +++ b/src/parser/wsdl/operation.js @@ -173,7 +173,7 @@ class Operation extends WSDLElement { var elementDescriptor = part.element.describe(definitions); inputParts.addElement(elementDescriptor); } - } + } } if (this.output && this.output.body) { for (let p in this.output.body.parts) { @@ -346,8 +346,10 @@ class Operation extends WSDLElement { for (let p in this.input.body.parts) { let part = this.input.body.parts[p]; element = part.element; - assert(part.element && !part.type, - 'Document/literal part should use element'); + if (!(part.element && !part.type)) { + console.error('Document/literal part should use element', part); + throw new Error('Document/literal part should use element'); + } count++; } } diff --git a/src/parser/wsdl/parameter.js b/src/parser/wsdl/parameter.js index 4a3f4802..e2ff21ab 100644 --- a/src/parser/wsdl/parameter.js +++ b/src/parser/wsdl/parameter.js @@ -20,7 +20,8 @@ class Parameter extends WSDLElement { this.headers = this.headers || []; // soap:header this.headers.push(child); - } else if (child.name === 'fault') { //Revisit. Never gets executed. + } else if (child.name === 'fault') { + //Revisit. Never gets executed. this.fault = child; } } @@ -31,6 +32,10 @@ class Parameter extends WSDLElement { // Resolve $message var messageName = QName.parse(this.$message).name; var message = definitions.messages[messageName]; + if (!message) { + console.error('Unable to resolve message %s for', this.$message, this); + throw new Error('Unable to resolve message ' + this.$message); + } message.postProcess(definitions); this.message = message; } @@ -89,6 +94,11 @@ class Parameter extends WSDLElement { } } -Parameter.allowedChildren = ['body', 'SecuritySpecRef', 'documentation', 'header']; +Parameter.allowedChildren = [ + 'body', + 'SecuritySpecRef', + 'documentation', + 'header' +]; module.exports = Parameter; diff --git a/src/parser/xsd/schema.js b/src/parser/xsd/schema.js index eb77fa9b..6e3f3c46 100644 --- a/src/parser/xsd/schema.js +++ b/src/parser/xsd/schema.js @@ -19,6 +19,7 @@ class Schema extends XSDElement { } merge(source, isInclude) { + if (source === this) return this; assert(source instanceof Schema); if (this.$targetNamespace === source.$targetNamespace || // xsd:include allows the target schema that does not have targetNamespace @@ -31,7 +32,7 @@ class Schema extends XSDElement { _.merge(this.attributeGroups, source.attributeGroups); _.merge(this.xmlns, source.xmlns); if (Array.isArray(source.includes)) { - this.includes = this.includes.concat(source.includes); + this.includes = _.uniq(this.includes.concat(source.includes)); } } return this; diff --git a/test/wsdl-parse-test.js b/test/wsdl-parse-test.js index 752e9081..be01fce8 100644 --- a/test/wsdl-parse-test.js +++ b/test/wsdl-parse-test.js @@ -4,72 +4,115 @@ var path = require('path'); var openWSDL = require('..').WSDL.open; var assert = require('assert'); - - - describe(__filename, function() { it('should parse recursive elements', function(done) { - openWSDL(path.resolve(__dirname, 'wsdl/recursive.wsdl'), - function(err, def) { - var part = def.definitions.messages.operationRequest.parts.params; - assert(part.element); - assert.equal(part.element.$name, 'operationRequest'); - assert.equal(part.element.$type, 'tns:OperationRequest'); - done(); - }); + openWSDL(path.resolve(__dirname, 'wsdl/recursive.wsdl'), function( + err, + def + ) { + var part = def.definitions.messages.operationRequest.parts.params; + assert(part.element); + assert.equal(part.element.$name, 'operationRequest'); + assert.equal(part.element.$type, 'tns:OperationRequest'); + done(); + }); }); it('should parse recursive wsdls', function(done) { - openWSDL(path.resolve(__dirname, 'wsdl/recursive/file.wsdl'), - function(err, def) { - // If we get here then we succeeded - done(err); - }); + openWSDL(path.resolve(__dirname, 'wsdl/recursive/file.wsdl'), function( + err, + def + ) { + // If we get here then we succeeded + done(err); + }); }); it('should parse recursive wsdls keeping default options', function(done) { - openWSDL(path.resolve(__dirname, 'wsdl/recursive/file.wsdl'), + openWSDL(path.resolve(__dirname, 'wsdl/recursive/file.wsdl'), function( + err, + def + ) { + if (err) { + return done(err); + } + + def._includesWsdl.forEach(function(currentWsdl) { + assert.deepEqual(def.options, currentWsdl.options); + }); + + done(); + }); + }); + + it('should parse recursive wsdls keeping provided options', function(done) { + openWSDL( + path.resolve(__dirname, 'wsdl/recursive/file.wsdl'), + { + ignoredNamespaces: { + namespaces: ['targetNamespace', 'typedNamespace'], + override: true + } + }, function(err, def) { if (err) { return done(err); } - def._includesWsdl.forEach(function(currentWsdl) { + def._includesWsdl.forEach(function(currentWsdl, index) { assert.deepEqual(def.options, currentWsdl.options); }); done(); - }); + } + ); }); - it('should parse recursive wsdls keeping provided options', function(done) { - openWSDL(path.resolve(__dirname, 'wsdl/recursive/file.wsdl'), { - ignoredNamespaces: { - namespaces: ['targetNamespace', 'typedNamespace'], - override: true - } - }, function(err, def) { - if (err) { - return done(err); + it('should parse types with same or no target namespaces', function(done) { + openWSDL( + path.resolve(__dirname, 'wsdl/types-with-schemas/wsdl_service.wsdl'), + function(err, def) { + var schemas = def.definitions.schemas; + assert.deepEqual(Object.keys(schemas), [ + 'undefined', + 'http://company.de/cake/synonymelisten/webservice', + 'http://company.de/cake/synonymelisten', + 'http://company.de/cake/synonymelisten/webservice/exceptions' + ]); + done(); } - - def._includesWsdl.forEach(function(currentWsdl, index) { - assert.deepEqual(def.options, currentWsdl.options); - }); - - done(); - }); + ); }); - it('should parse types with same or no target namespaces', function(done) { - openWSDL(path.resolve(__dirname, 'wsdl/types-with-schemas/wsdl_service.wsdl'), + it('should parse types with recursive imports', function(done) { + openWSDL( + path.resolve( + __dirname, + 'wsdl/recursive-schema-import/TestFunctionManagement.wsdl' + ), function(err, def) { var schemas = def.definitions.schemas; - assert.deepEqual(Object.keys(schemas), [ 'undefined', - 'http://company.de/cake/synonymelisten/webservice', - 'http://company.de/cake/synonymelisten', - 'http://company.de/cake/synonymelisten/webservice/exceptions' ]); + assert.deepEqual(Object.keys(schemas), [ + 'http://www.example.com/Schema/TEST_TestFunctionManagement', + 'http://www.example.com/Schema/TEST_Common', + 'http://www.example.com/Schema/TEST', + 'http://www.example.com/Schema/Infrastructure/SOAP', + 'http://www.example.com/Schema/Infrastructure', + 'http://www.example.com/Schema/TEST_AccountingUnit', + 'http://www.example.com/Schema/TEST_Location', + 'http://www.example.com/Schema/TEST_TestFunction', + 'http://www.example.com/Schema/TEST_BusinessDirectionItem', + 'http://www.example.com/Schema/TEST_ResourceItem', + 'http://www.example.com/Schema/TEST_Channel', + 'http://www.example.com/Schema/TEST_Product', + 'http://www.example.com/Schema/TEST_Event', + 'http://www.example.com/Schema/TEST_Arrangement', + 'http://www.example.com/Schema/TEST_Authorization', + 'http://www.example.com/Schema/TEST_Communication', + 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' + ]); done(); - }); + } + ); }); }); diff --git a/test/wsdl/recursive-schema-import/AccountingUnit.xsd b/test/wsdl/recursive-schema-import/AccountingUnit.xsd new file mode 100755 index 00000000..1405ffa9 --- /dev/null +++ b/test/wsdl/recursive-schema-import/AccountingUnit.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/Arrangement.xsd b/test/wsdl/recursive-schema-import/Arrangement.xsd new file mode 100755 index 00000000..e4a22c39 --- /dev/null +++ b/test/wsdl/recursive-schema-import/Arrangement.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/Authorization.xsd b/test/wsdl/recursive-schema-import/Authorization.xsd new file mode 100755 index 00000000..b9041243 --- /dev/null +++ b/test/wsdl/recursive-schema-import/Authorization.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/BusinessDirectionItem.xsd b/test/wsdl/recursive-schema-import/BusinessDirectionItem.xsd new file mode 100755 index 00000000..c4eb1674 --- /dev/null +++ b/test/wsdl/recursive-schema-import/BusinessDirectionItem.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/Channel.xsd b/test/wsdl/recursive-schema-import/Channel.xsd new file mode 100755 index 00000000..56b7445d --- /dev/null +++ b/test/wsdl/recursive-schema-import/Channel.xsd @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/Common.xsd b/test/wsdl/recursive-schema-import/Common.xsd new file mode 100755 index 00000000..9ac56743 --- /dev/null +++ b/test/wsdl/recursive-schema-import/Common.xsd @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/Communication.xsd b/test/wsdl/recursive-schema-import/Communication.xsd new file mode 100755 index 00000000..923feff7 --- /dev/null +++ b/test/wsdl/recursive-schema-import/Communication.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/Event.xsd b/test/wsdl/recursive-schema-import/Event.xsd new file mode 100755 index 00000000..dc1aade9 --- /dev/null +++ b/test/wsdl/recursive-schema-import/Event.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/Infrastructure.xsd b/test/wsdl/recursive-schema-import/Infrastructure.xsd new file mode 100755 index 00000000..da378eb8 --- /dev/null +++ b/test/wsdl/recursive-schema-import/Infrastructure.xsd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/InfrastructureSOAP.xsd b/test/wsdl/recursive-schema-import/InfrastructureSOAP.xsd new file mode 100755 index 00000000..17bd4a21 --- /dev/null +++ b/test/wsdl/recursive-schema-import/InfrastructureSOAP.xsd @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/InfrastructureSOAPSecurityHeader.xsd b/test/wsdl/recursive-schema-import/InfrastructureSOAPSecurityHeader.xsd new file mode 100755 index 00000000..1ecc177f --- /dev/null +++ b/test/wsdl/recursive-schema-import/InfrastructureSOAPSecurityHeader.xsd @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/Location.xsd b/test/wsdl/recursive-schema-import/Location.xsd new file mode 100755 index 00000000..06c08c2e --- /dev/null +++ b/test/wsdl/recursive-schema-import/Location.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/Product.xsd b/test/wsdl/recursive-schema-import/Product.xsd new file mode 100755 index 00000000..a5e7bb7d --- /dev/null +++ b/test/wsdl/recursive-schema-import/Product.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/ResourceItem.xsd b/test/wsdl/recursive-schema-import/ResourceItem.xsd new file mode 100755 index 00000000..073d948f --- /dev/null +++ b/test/wsdl/recursive-schema-import/ResourceItem.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/TEST.xsd b/test/wsdl/recursive-schema-import/TEST.xsd new file mode 100755 index 00000000..bc40a983 --- /dev/null +++ b/test/wsdl/recursive-schema-import/TEST.xsd @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/TESTAdditionalHeaders.xsd b/test/wsdl/recursive-schema-import/TESTAdditionalHeaders.xsd new file mode 100755 index 00000000..42400b45 --- /dev/null +++ b/test/wsdl/recursive-schema-import/TESTAdditionalHeaders.xsd @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/TestFunction.xsd b/test/wsdl/recursive-schema-import/TestFunction.xsd new file mode 100755 index 00000000..c362459f --- /dev/null +++ b/test/wsdl/recursive-schema-import/TestFunction.xsd @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/wsdl/recursive-schema-import/TestFunctionManagement.wsdl b/test/wsdl/recursive-schema-import/TestFunctionManagement.wsdl new file mode 100755 index 00000000..cd5d1175 --- /dev/null +++ b/test/wsdl/recursive-schema-import/TestFunctionManagement.wsdl @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/recursive-schema-import/TestFunctionManagement.xsd b/test/wsdl/recursive-schema-import/TestFunctionManagement.xsd new file mode 100755 index 00000000..cd9a476b --- /dev/null +++ b/test/wsdl/recursive-schema-import/TestFunctionManagement.xsd @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 5ca08ac39a5864b8ba2c2b8036ec5bc837881abd Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 26 Mar 2018 10:28:00 -0700 Subject: [PATCH 21/89] 1.6.2 * fix xsd include/import recursive processing (Raymond Feng) --- CHANGES.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index db8313df..39717212 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +2018-03-26, Version 1.6.2 +========================= + + * fix xsd include/import recursive processing (Raymond Feng) + + 2018-03-19, Version 1.6.1 ========================= diff --git a/package.json b/package.json index 42c06507..d9a416e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.6.1", + "version": "1.6.2", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From b5c18f94ae31621045b495a334cf0a42160fbd50 Mon Sep 17 00:00:00 2001 From: Carlos Assis Date: Wed, 4 Apr 2018 16:53:37 -0300 Subject: [PATCH 22/89] fix soap-stub example on README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4519d3a9..bf82724f 100644 --- a/README.md +++ b/README.md @@ -815,7 +815,7 @@ your clients. ```javascript var sinon = require('sinon'); -var soapStub = require('soap-stub'); +var soapStub = require('strong-soap/soap-stub'); var urlMyApplicationWillUseWithCreateClient = './example/stockquote.wsdl'; var clientStub = { From 7198472442202cf8ab7ff40204b3dbe8b5c9b14a Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 12 Apr 2018 10:25:16 -0700 Subject: [PATCH 23/89] fix: add element text value --- src/parser/wsdl.js | 12 +++++++++++- test/wsdl-parse-test.js | 6 ++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/parser/wsdl.js b/src/parser/wsdl.js index 653887b3..93d2d8b0 100644 --- a/src/parser/wsdl.js +++ b/src/parser/wsdl.js @@ -237,15 +237,17 @@ class WSDL { _parse(xml) { var self = this, - p = sax.parser(true), + p = sax.parser(true, {trim: true}), stack = [], root = null, types = null, schema = null, + text = '', options = self.options; p.onopentag = function(node) { debug('Start element: %j', node); + text = ''; // reset text var nsName = node.name; var attrs = node.attributes; @@ -287,9 +289,17 @@ class WSDL { var top = stack[stack.length - 1]; assert(top, 'Unmatched close tag: ' + name); + if (text) { + top[self.options.valueKey] = text; + text = ''; + } top.endElement(stack, name); }; + p.ontext = function(str) { + text = text + str; + } + debug('WSDL xml: %s', xml); p.write(xml).close(); diff --git a/test/wsdl-parse-test.js b/test/wsdl-parse-test.js index be01fce8..3d08af5d 100644 --- a/test/wsdl-parse-test.js +++ b/test/wsdl-parse-test.js @@ -23,6 +23,12 @@ describe(__filename, function() { err, def ) { + var schema = def.definitions.schemas['http://www.Dummy.com/Common/Types']; + var complexType = schema.complexTypes['ContactMedium']; + var doc = complexType.children[0].children[0]; + assert.equal(doc.name, 'documentation'); + assert.equal(doc.$value, 'Defines the method of contact to reach a ' + + 'party (in\n their specified role)'); // If we get here then we succeeded done(err); }); From 23cf36bb4b0b530d107e90f15f584319c4e7a85d Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 12 Apr 2018 12:26:17 -0700 Subject: [PATCH 24/89] 1.7.0 * fix: add element text value (Raymond Feng) --- CHANGES.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 39717212..a6381f64 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +2018-04-12, Version 1.7.0 +========================= + + * fix: add element text value (Raymond Feng) + + 2018-03-26, Version 1.6.2 ========================= diff --git a/package.json b/package.json index d9a416e6..ee8a6a42 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.6.2", + "version": "1.7.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From 31bdde55c06a5f175e11a48a534e9d9a41c58760 Mon Sep 17 00:00:00 2001 From: shimks Date: Wed, 2 May 2018 13:38:17 -0400 Subject: [PATCH 25/89] feat: add promise support for client operation --- README.md | 18 +++++++++++++ src/client.js | 15 +++++++---- src/utils.js | 15 +++++++++++ test/client-test.js | 66 ++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 108 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4519d3a9..dbee6152 100644 --- a/README.md +++ b/README.md @@ -172,6 +172,24 @@ Call *method* on the SOAP service. // soapHeader is the response soap header as a JavaScript object }) ``` + +A *method* can also be called as a promise. + +``` javascript + client.MyFunction({name: 'value'}).then(function({result, envelope, soapHeader}){ + // ... + }, function(err) { + // ... + }); + + // in async/await flavor + try { + const {result, envelope, soapHeader} = await client.MyFunction({name: 'value'}); + } catch(err) { + // handle error + } +``` + ### Client.*service*.*port*.*method*(args, callback[, options[, extraHeaders]]) Call a *method* using a specific *service* and *port*. diff --git a/src/client.js b/src/client.js index f298e990..07aa0f44 100644 --- a/src/client.js +++ b/src/client.js @@ -13,7 +13,8 @@ var HttpClient = require('./http'), _ = require('lodash'), debug = require('debug')('strong-soap:client'), debugDetail = require('debug')('strong-soap:client:detail'), - debugSensitive = require('debug')('strong-soap:client:sensitive'); + debugSensitive = require('debug')('strong-soap:client:sensitive'), + utils = require('./utils'); class Client extends Base { constructor(wsdl, endpoint, options) { @@ -75,6 +76,7 @@ class Client extends Base { var self = this; var temp; return function(args, callback, options, extraHeaders) { + if (!args) args = {}; if (typeof args === 'function') { callback = args; args = {}; @@ -87,11 +89,14 @@ class Client extends Base { callback = extraHeaders; extraHeaders = options; options = temp; + } else if (typeof callback === 'object') { + extraHeaders = options; + options = callback; + callback = undefined; } - self._invoke(operation, args, location, - function(error, result, raw, soapHeader) { - callback(error, result, raw, soapHeader); - }, options, extraHeaders); + callback = callback || utils.createPromiseCallback(); + self._invoke(operation, args, location, callback, options, extraHeaders); + return callback.promise; }; } diff --git a/src/utils.js b/src/utils.js index af0b4529..cf437299 100644 --- a/src/utils.js +++ b/src/utils.js @@ -64,3 +64,18 @@ exports.toXMLDate = function(d) { + pad(d.getUTCSeconds()) + 'Z'; }; +exports.createPromiseCallback = function createPromiseCallback() { + var cb; + var promise = new Promise(function(resolve, reject) { + cb = function(err, result, envelope, soapHeader) { + if (err) { + reject(err); + } else { + resolve({result, envelope, soapHeader}); + } + } + }); + cb.promise = promise; + return cb; +} + diff --git a/test/client-test.js b/test/client-test.js index 42be2f0d..c86ed3a4 100644 --- a/test/client-test.js +++ b/test/client-test.js @@ -101,6 +101,7 @@ describe('SOAP Client', function() { var server = null; var hostname = '127.0.0.1'; var port = 0; + var rawBody = '\ntemp response'; before(function(done) { server = http.createServer(function (req, res) { @@ -109,7 +110,7 @@ describe('SOAP Client', function() { res.setHeader('status', status_value); res.statusCode = 200; //res.write(JSON.stringify({tempResponse: 'temp'}), 'utf8'); - res.write('\ntemp response'); + res.write(rawBody); res.end(); }).listen(port, hostname, done); }); @@ -394,6 +395,69 @@ describe('SOAP Client', function() { }); }, 'http://' + hostname + ':' + server.address().port); }); + + it('should allow calling the method as a promise with no arguments', function(done) { + soap.createClient(__dirname+'/wsdl/json_response.wsdl', function(err, client) { + assert.ok(client); + assert.ok(!err); + client.MyOperation().then(({result, envelope}) => { + assert.ok(!err); + assert.ok(result); + assert.ok(result === 'temp response'); + assert.ok(envelope === rawBody); + assert.ok(client.lastResponseHeaders.status === 'fail'); + done(); + }, done).catch(done); + }, 'http://' + hostname + ':' + server.address().port); + }); + + it('should allow calling the method as a promise with only args', function(done) { + soap.createClient(__dirname+'/wsdl/json_response.wsdl', function(err, client) { + assert.ok(client); + assert.ok(!err); + client.MyOperation({Request: 'temp request'}).then(({result, envelope}) => { + assert.ok(!err); + assert.ok(result); + assert.ok(result === 'temp response'); + assert.ok(envelope === rawBody); + assert.ok(client.lastResponseHeaders.status === 'fail'); + done(); + }, done).catch(done); + }, 'http://' + hostname + ':' + server.address().port); + }); + + it('should allow calling the method as a promise with args and options', function(done) { + soap.createClient(__dirname+'/wsdl/json_response.wsdl', function(err, client) { + assert.ok(client); + assert.ok(!err); + client.MyOperation({Request: 'temp request'}, {headers: {'options-test-header': 'test'}}).then(({result, envelope}) => { + assert.ok(!err); + assert.ok(result); + assert.ok(result === 'temp response'); + assert.ok(envelope === rawBody); + assert.ok(client.lastResponseHeaders.status === 'fail'); + assert.ok(client.lastRequestHeaders['options-test-header'] === 'test'); + done(); + }, done).catch(done); + }, 'http://' + hostname + ':' + server.address().port); + }); + + it('should allow calling the method as a promise with args, options, and extra headers', function(done) { + soap.createClient(__dirname+'/wsdl/json_response.wsdl', function(err, client) { + assert.ok(client); + assert.ok(!err); + client.MyOperation({Request: 'temp request'}, {headers: {'options-test-header': 'test'}}, {'test-header': 'test'}).then(({result, envelope, soapHeader}) => { + assert.ok(!err); + assert.ok(result); + assert.ok(result === 'temp response'); + assert.ok(envelope === rawBody); + assert.ok(client.lastResponseHeaders.status === 'pass'); + assert.ok(client.lastRequestHeaders['options-test-header'] === 'test'); + assert.ok(client.lastRequestHeaders['test-header'] === 'test'); + done(); + }, done).catch(done); + }, 'http://' + hostname + ':' + server.address().port); + }); }); From 5c7fe8ac4ffa193966bc242b7de347427829bd06 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 7 May 2018 13:29:05 -0700 Subject: [PATCH 26/89] 1.8.0 * feat: add promise support for client operation (shimks) --- CHANGES.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index a6381f64..03376df5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +2018-05-07, Version 1.8.0 +========================= + + * feat: add promise support for client operation (shimks) + + 2018-04-12, Version 1.7.0 ========================= diff --git a/package.json b/package.json index ee8a6a42..127412ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.7.0", + "version": "1.8.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From 78aa44f1a9bd228c3c3a5737056688fcf6ab490e Mon Sep 17 00:00:00 2001 From: Diana Lau Date: Tue, 8 May 2018 11:52:34 -0400 Subject: [PATCH 27/89] 1.9.0 --- CHANGES.md | 2 ++ package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 03376df5..a3f1d912 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,5 @@ + + 2018-05-07, Version 1.8.0 ========================= diff --git a/package.json b/package.json index 127412ce..c19472b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.8.0", + "version": "1.9.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From c41ca74f17859cc2999a9fea88916fe5af36d6b8 Mon Sep 17 00:00:00 2001 From: candytangnb Date: Thu, 28 Jun 2018 23:49:42 -0400 Subject: [PATCH 28/89] [WebFM] cs/pl/ru translation cs/pl/ru translation check-in by YI TANG (tangyinb@cn.ibm.com) using WebFM tool. --- intl/cs/messages.json | 23 +++++++++++++++++++++++ intl/pl/messages.json | 23 +++++++++++++++++++++++ intl/ru/messages.json | 23 +++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 intl/cs/messages.json create mode 100644 intl/pl/messages.json create mode 100644 intl/ru/messages.json diff --git a/intl/cs/messages.json b/intl/cs/messages.json new file mode 100644 index 00000000..f511c307 --- /dev/null +++ b/intl/cs/messages.json @@ -0,0 +1,23 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "Zadaný soubor {{pfx}} by měl být {{buffer}} nebo umístění souboru", + "1f2c65133b5bb463e7d1fceda5b31156": "Klíčový prvek {0} {1} MUSÍ obsahovat jeden a pouze jeden prvek selektoru", + "28c828192eb440b64b8efd7f08cc37b3": "Atribut {{itemType}} není povolen, pokud obsah obsahuje prvek {{simpleType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "Cílový obor názvů \"{0}\" je již používán jiným schématem", + "37e4bf66d90c313e7adb3317345be046": "Styl {{WSDL}} není podporován: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Neplatný název qname: {0}", + "46ad858fdf2e460aa3b626d6455362f2": "Klíčový prvek {0} {1} MUSÍ obsahovat jeden nebo více prvků pole", + "49569f279dd1e347fd90d448fdafbb93": "Neočekávaný kořenový prvek pro {{WSDL}} nebo zahrnutí", + "552f3502256707b8c5b12ddb64e3f74e": "Modul {{ursa}} musí být nainstalován pro použití {{WSSecurityCert}}", + "61b096fd390a169fc86698a3fe30387f": "Byl nalezen neočekávaný prvek ({0}) uvnitř {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} by měl být {{buffer}} nebo {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "Nelze analyzovat odezvu", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} by měl být {{buffer}} nebo {{string}}!", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "Seznam musí mít typ položky", + "bcb4356ee2e7a196b9671acf3989741d": "Neplatné jméno uživatele nebo heslo", + "d40b6f905bf039c4d627ecafb7fdcac5": "Žádné záhlaví zabezpečení", + "d7bda8e2c3faafdf0988f8cb4719a01d": "Seznam může obsahovat pouze jeden prvek {{simpleType}}", + "da96ad47da6be6a613f921b260a33ce0": "Narušení {{WS-I}}: Část {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} {0}", + "e158dd1d250f1cc3df497728da556be1": "Nezdařilo se svázat s {{WSDL}}", + "fab749587c48e724a661d77a44084214": "Neplatná {{WSDL URL}}: {0}\n\n\r Kód: {1}\n\n\r Tělo odezvy: {2}" +} + diff --git a/intl/pl/messages.json b/intl/pl/messages.json new file mode 100644 index 00000000..575f418b --- /dev/null +++ b/intl/pl/messages.json @@ -0,0 +1,23 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "podany plik {{pfx}} powinien być {{buffer}} lub lokalizacją pliku", + "1f2c65133b5bb463e7d1fceda5b31156": "Element klucza {0} {1} musi zawierać jeden i tylko jeden element selektora", + "28c828192eb440b64b8efd7f08cc37b3": "Atrybut {{itemType}} jest niedozwolony, jeśli treść zawiera element {{simpleType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "Docelowa przestrzeń nazw \"{0}\" jest już używana przez inny schemat", + "37e4bf66d90c313e7adb3317345be046": "Styl {{WSDL}} nie jest obsługiwany: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Niepoprawna nazwa qname: {0}", + "46ad858fdf2e460aa3b626d6455362f2": "Element klucza {0} {1} musi zawierać co najmniej jeden element pola", + "49569f279dd1e347fd90d448fdafbb93": "Nieoczekiwany element główny {{WSDL}} lub include", + "552f3502256707b8c5b12ddb64e3f74e": "Moduł {{ursa}} musi być zainstalowany, aby można było używać {{WSSecurityCert}}", + "61b096fd390a169fc86698a3fe30387f": "Znaleziono nieoczekiwany element ({0}) w {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} powinien mieć wartość {{buffer}} lub {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "Nie można przeanalizować odpowiedzi", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} powinien mieć wartość {{buffer}} lub {{string}}!", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "Lista musi mieć typ elementu", + "bcb4356ee2e7a196b9671acf3989741d": "Niepoprawna nazwa użytkownika lub hasło", + "d40b6f905bf039c4d627ecafb7fdcac5": "Brak nagłówka zabezpieczeń", + "d7bda8e2c3faafdf0988f8cb4719a01d": "Lista może zawierać tylko jeden element {{simpleType}}", + "da96ad47da6be6a613f921b260a33ce0": "Naruszenie {{WS-I}}: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} część {0}", + "e158dd1d250f1cc3df497728da556be1": "Nie powiodło się powiązanie z {{WSDL}}", + "fab749587c48e724a661d77a44084214": "Niepoprawny {{WSDL URL}}: {0}\n\n\r Kod: {1}\n\n\r Treść odpowiedzi: {2}" +} + diff --git a/intl/ru/messages.json b/intl/ru/messages.json new file mode 100644 index 00000000..de4c04f1 --- /dev/null +++ b/intl/ru/messages.json @@ -0,0 +1,23 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "Указанный файл {{pfx}} должен быть расположением файла или {{buffer}}", + "1f2c65133b5bb463e7d1fceda5b31156": "Элемент ключа {0} {1} ДОЛЖЕН содержать один и только один элемент selector", + "28c828192eb440b64b8efd7f08cc37b3": "Атрибут {{itemType}} не разрешен, если в материалах содержится элемент {{simpleType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "Целевое пространство имен \"{0}\" уже используется в другой схеме", + "37e4bf66d90c313e7adb3317345be046": "Стиль {{WSDL}} не поддерживается: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Недопустимое значение qname: {0}", + "46ad858fdf2e460aa3b626d6455362f2": "Элемент ключа {0} {1} ДОЛЖЕН содержать хотя бы один элемент field", + "49569f279dd1e347fd90d448fdafbb93": "Непредвиденный корневой элемент в {{WSDL}} или в объекте include", + "552f3502256707b8c5b12ddb64e3f74e": "Необходимо установить модуль {{ursa}} для использования {{WSSecurityCert}}", + "61b096fd390a169fc86698a3fe30387f": "Обнаружен непредвиденный элемент ({0}) в {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} должен быть {{buffer}} или {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "Не удалось проанализировать ответ", + "7f7cb47259df769f2d3b3f7133f1a1ea": "Для {{cert}} требуется тип {{buffer}} или {{string}}!", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "Список должен иметь тип элементов", + "bcb4356ee2e7a196b9671acf3989741d": "Недопустимое имя пользователя или недопустимый пароль", + "d40b6f905bf039c4d627ecafb7fdcac5": "Нет заголовка защиты", + "d7bda8e2c3faafdf0988f8cb4719a01d": "Список может содержать только один элемент {{simpleType}}", + "da96ad47da6be6a613f921b260a33ce0": "Нарушение {{WS-I}}: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}}, часть {0}", + "e158dd1d250f1cc3df497728da556be1": "Не удалось выполнить привязку к {{WSDL}}", + "fab749587c48e724a661d77a44084214": "Недопустимый {{WSDL URL}}: {0}\n\n\r Код: {1}\n\n\r Тело ответа: {2}" +} + From b251842cc52915de84b26b3225e9ad264a1b4696 Mon Sep 17 00:00:00 2001 From: Diana Lau Date: Mon, 9 Jul 2018 19:58:18 -0400 Subject: [PATCH 29/89] 1.10.0 * [WebFM] cs/pl/ru translation (candytangnb) * fix soap-stub example on README.md (Carlos Assis) --- CHANGES.md | 11 +++++++++++ package.json | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index a3f1d912..4d8501f7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,14 @@ +2018-07-09, Version 1.10.0 +========================== + + * [WebFM] cs/pl/ru translation (candytangnb) + + * fix soap-stub example on README.md (Carlos Assis) + + +2018-05-08, Version 1.9.0 +========================= + 2018-05-07, Version 1.8.0 diff --git a/package.json b/package.json index c19472b4..13e6a767 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.9.0", + "version": "1.10.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From b72b01c8b48b8053b190ea04e0196ae4d1a219ac Mon Sep 17 00:00:00 2001 From: Jon Roberts Date: Mon, 9 Jul 2018 15:59:52 +0100 Subject: [PATCH 30/89] Load a wsdl with no imports from the cache Add tests to cover loading a multipart wsdl from memory Allow the wsdl parser to load files from WSDL_CACHE Update to comments --- src/parser/wsdl.js | 22 +++- test/wsdl-load-from-memory-test.js | 116 ++++++++++++++++++++++ test/wsdl/from-memory/main.wsdl | 33 ++++++ test/wsdl/from-memory/multipart/main.wsdl | 33 ++++++ test/wsdl/from-memory/multipart/sub.wsdl | 48 +++++++++ test/wsdl/from-memory/multipart/xsd.xsd | 13 +++ test/wsdl/from-memory/stockquote.wsdl | 108 ++++++++++++++++++++ 7 files changed, 371 insertions(+), 2 deletions(-) create mode 100644 test/wsdl-load-from-memory-test.js create mode 100644 test/wsdl/from-memory/main.wsdl create mode 100644 test/wsdl/from-memory/multipart/main.wsdl create mode 100644 test/wsdl/from-memory/multipart/sub.wsdl create mode 100644 test/wsdl/from-memory/multipart/xsd.xsd create mode 100644 test/wsdl/from-memory/stockquote.wsdl diff --git a/src/parser/wsdl.js b/src/parser/wsdl.js index 93d2d8b0..03f668a7 100644 --- a/src/parser/wsdl.js +++ b/src/parser/wsdl.js @@ -47,6 +47,9 @@ class WSDL { fromFunc = this._fromServices; } + // register that this WSDL has started loading + self.isLoaded = true; + process.nextTick(function() { try { fromFunc.call(self, definition); @@ -371,7 +374,14 @@ class WSDL { WSDL_CACHE = options.WSDL_CACHE; if (fromCache = WSDL_CACHE[uri]) { - return callback.call(fromCache, null, fromCache); + /** + * Only return from the cache is the document is fully (or partially) + * loaded. This allows the contents of a document to have been read + * into the cache, but with no processing performed on it yet. + */ + if(fromCache.isLoaded){ + return callback.call(fromCache, null, fromCache); + } } return WSDL.open(uri, options, callback); @@ -390,7 +400,15 @@ class WSDL { debug('wsdl open. request_headers: %j request_options: %j', request_headers, request_options); var wsdl; - if (!/^https?:/.test(uri)) { + var fromCache = WSDL_CACHE[uri]; + /** + * If the file is fully loaded in the cache, return it. + * Otherwise load it from the file system or URL. + */ + if (fromCache && !fromCache.isLoaded) { + fromCache.load(callback); + } + else if (!/^https?:/.test(uri)) { debug('Reading file: %s', uri); fs.readFile(uri, 'utf8', function(err, definition) { if (err) { diff --git a/test/wsdl-load-from-memory-test.js b/test/wsdl-load-from-memory-test.js new file mode 100644 index 00000000..d97a4636 --- /dev/null +++ b/test/wsdl-load-from-memory-test.js @@ -0,0 +1,116 @@ +"use strict"; + +var fs = require('fs'), + soap = require('..').soap, + WSDL = soap.WSDL, + assert = require('assert'), + path = require('path'); + +describe('wsdl-load-from-memory-tests', function() { + + describe('should load the wsdl from memory', function () { + + var stockQuoteWsdlContents + + beforeEach(function (done) { + + // Read the contents of the WSDL from the file system + fs.readFile(__dirname + '/wsdl/from-memory/stockquote.wsdl', 'utf8', function (err, definition) { + if (err) { + done(err) + } else { + stockQuoteWsdlContents = definition; + done() + } + }); + }); + + it('should load a wsdl with no imports directly from memory', function (done) { + + var options = { + WSDL_CACHE: {} + } + // Create the initial wsdl directly + var stockQuoteWsdl = new WSDL(stockQuoteWsdlContents, undefined, options) + + // Load the wsdl fully once its been created in memory + stockQuoteWsdl.load(function () { + assert.equal(stockQuoteWsdl.definitions['$name'], "StockQuote") + done() + }) + }); + }); + + describe('should load a multipart wsdl from the cache', function () { + + var options = { + WSDL_CACHE: {} + } + + beforeEach(function (done) { + var filePrefix = __dirname + '/wsdl/from-memory/multipart/'; + var promiseList = [] + /** + * Read the contents of each of the files from the multipart directory + */ + fs.readdirSync(filePrefix).forEach(function (fileName) { + promiseList.push(new Promise(function (resolve, reject) { + fs.readFile(filePrefix + fileName, 'utf8', function (err, definition) { + if (err) { + reject(err) + } else { + /** + * Create a WSDL object for each of the files and store them + * in options.WSDL_CACHE. Don't call load() at this point. + */ + + // This path name isn't the correct one, however it is what the strong-soap + // implementation will default to when it comes to checking the cache. + var includePath = path.resolve(fileName) + var wsdl = new WSDL(definition, includePath, options) + options.WSDL_CACHE[includePath] = wsdl + wsdl.WSDL_CACHE = options.WSDL_CACHE + resolve(wsdl) + } + }) + })) + }); + Promise.all(promiseList).then(function (values) { + done(); + }) + + }); + + it('a multipart wsdl should load from the cache with no errors', function(done){ + /** + * Read in a file wsdl file containing a definition. For the purpose of this test this file should be one that is + * in the WSDL_CACHE already, but loaded from a different location. The reason for the different location is that + * the this will show that the additional wsdls and xsd files are being read from the cache and not just from the + * relative path on the file system. + */ + fs.readFile(__dirname + '/wsdl/from-memory/main.wsdl', 'utf8', function (err, definition) { + + assert.ok(!err); + /** + * Load the starting point wsdl from memory. Put in an incorrect uri as this should be loaded from the CACHE + */ + var wsdlDefinition = new WSDL(definition, 'startingWsdlUri', options) + + /** + * The load() function should take into account wsdls which have had their definitions loaded into the WSDL_CACHE, + * but still needs to be fully parsed and loaded. + */ + wsdlDefinition.load(function (err, loadedWsdl) { + assert.ok(!err); + assert(loadedWsdl); + assert(loadedWsdl.definitions); + assert.notDeepEqual(loadedWsdl.definitions.bindings, {}, "Bindings not loaded on wsdl"); + assert.notDeepEqual(loadedWsdl.definitions.services, {}, "Services not loaded on wsdl"); + assert.notDeepEqual(loadedWsdl.definitions.portTypes, {}, "PortTypes not loaded on wsdl"); + done(); + }) + }) + }) + }); +}); + diff --git a/test/wsdl/from-memory/main.wsdl b/test/wsdl/from-memory/main.wsdl new file mode 100644 index 00000000..e21f37e0 --- /dev/null +++ b/test/wsdl/from-memory/main.wsdl @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/from-memory/multipart/main.wsdl b/test/wsdl/from-memory/multipart/main.wsdl new file mode 100644 index 00000000..e21f37e0 --- /dev/null +++ b/test/wsdl/from-memory/multipart/main.wsdl @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/from-memory/multipart/sub.wsdl b/test/wsdl/from-memory/multipart/sub.wsdl new file mode 100644 index 00000000..a45639ed --- /dev/null +++ b/test/wsdl/from-memory/multipart/sub.wsdl @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/from-memory/multipart/xsd.xsd b/test/wsdl/from-memory/multipart/xsd.xsd new file mode 100644 index 00000000..83bd5290 --- /dev/null +++ b/test/wsdl/from-memory/multipart/xsd.xsd @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/test/wsdl/from-memory/stockquote.wsdl b/test/wsdl/from-memory/stockquote.wsdl new file mode 100644 index 00000000..b5fd9c30 --- /dev/null +++ b/test/wsdl/from-memory/stockquote.wsdl @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ec4fb95e3f69ec62130ef4a7b77c96d04d82843f Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Tue, 10 Jul 2018 09:55:02 -0700 Subject: [PATCH 31/89] 1.11.0 * Load a wsdl with no imports from the cache (Jon Roberts) --- CHANGES.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 4d8501f7..d599ca34 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +2018-07-10, Version 1.11.0 +========================== + + * Load a wsdl with no imports from the cache (Jon Roberts) + + 2018-07-09, Version 1.10.0 ========================== diff --git a/package.json b/package.json index 13e6a767..1a643e8a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.10.0", + "version": "1.11.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From 05439bfd74ece422d0efd4aba5f293ebe913acda Mon Sep 17 00:00:00 2001 From: Vladimir Latyshev Date: Thu, 12 Jul 2018 19:10:17 +0300 Subject: [PATCH 32/89] add forgotten options to soap.listen(...) --- src/soap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/soap.js b/src/soap.js index 4902f415..d9af6687 100644 --- a/src/soap.js +++ b/src/soap.js @@ -64,7 +64,7 @@ function listen(server, pathOrOptions, services, xml) { } var wsdl = new parser.WSDL(xml || services, uri, options); - return new Server(server, path, services, wsdl); + return new Server(server, path, services, wsdl, options); } exports.security = security; From d62a136e98d229bee1ebcfcf9da08aeb6aa319ab Mon Sep 17 00:00:00 2001 From: Jon Roberts Date: Tue, 31 Jul 2018 13:35:41 +0100 Subject: [PATCH 33/89] Create client from cached wsdl README and linting changes --- README.md | 38 ++++++++++++++++++++++++++ src/soap.js | 1 + test/client-test.js | 66 +++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 103 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7f7cd3cd..f8d92140 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,44 @@ soap.createClient(url, options, function(err, client) { ``` +As well as creating a client via a `url`, an existing [WSDL](#wsdl) object can be passed in via `options.WSDL_CACHE`. + +``` +var soap = require('strong-soap').soap; +var WSDL = soap.WSDL; + +var url = 'http://www.webservicex.net/stockquote.asmx?WSDL'; + +// Pass in WSDL options if any + +var options = {}; +WSDL.open(url,options, + function(err, wsdl) { + // You should be able to get to any information of this WSDL from this object. Traverse + // the WSDL tree to get bindings, operations, services, portTypes, messages, + // parts, and XSD elements/Attributes. + + // Set the wsdl object in the cache. The key (e.g. 'stockquotewsdl') + // can be anything, but needs to match the parameter passed into soap.createClient() + var clientOptions = { + WSDL_CACHE : { + stockquotewsdl: wsdl + } + }; + soap.createClient('stockquotewsdl', clientOptions, function(err, client) { + var method = client['StockQuote']['StockQuoteSoap']['GetQuote']; + method(requestArgs, function(err, result, envelope, soapHeader) { + + //response envelope + console.log('Response Envelope: \n' + envelope); + //'result' is the response body + console.log('Result: \n' + JSON.stringify(result)); + }); + }); +}); +``` + + The Request envelope created by above service invocation: ``` diff --git a/src/soap.js b/src/soap.js index d9af6687..d227a62b 100644 --- a/src/soap.js +++ b/src/soap.js @@ -16,6 +16,7 @@ function _requestWSDL(url, options, callback) { callback = options; options = {}; } + _wsdlCache = options.WSDL_CACHE || _wsdlCache; var wsdl = _wsdlCache[url]; if (wsdl) { diff --git a/test/client-test.js b/test/client-test.js index c86ed3a4..c5827bf0 100644 --- a/test/client-test.js +++ b/test/client-test.js @@ -3,6 +3,7 @@ var fs = require('fs'), soap = require('..').soap, http = require('http'), + WSDL = soap.WSDL, assert = require('assert'), QName = require('..').QName; @@ -97,6 +98,67 @@ describe('SOAP Client', function() { }); }); + describe('Create a client from a wsdl preloaded in the options', function() { + + var defaultNamespaceWsdl; + + beforeEach(function(done) { + + // Read the contents of the WSDL from the file system + fs.readFile(__dirname + '/wsdl/default_namespace.wsdl', 'utf8', function (err, defaultNamespaceWsdlContents) { + if (err) { + done(err); + } else { + + var options = { + WSDL_CACHE: {} + }; + // Create the initial wsdl directly + defaultNamespaceWsdl = new WSDL(defaultNamespaceWsdlContents, undefined, {}); + + // Load the wsdl fully once its been created in memory + defaultNamespaceWsdl.load(function () { + assert.equal(defaultNamespaceWsdl.definitions.$name, "MyService"); + }); + done(); + } + }); + }); + + it('should successfully create a client based on the wsdl in the options', function(done) { + + var options = { + WSDL_CACHE: { + preloadedCachedWsdl: defaultNamespaceWsdl + } + }; + soap.createClient('preloadedCachedWsdl', options, function(err, client) { + + assert.ok(client); + assert.ok(client.getSoapHeaders().length === 0); + + // Preform the same tests from "should add and clear soap headers" + // to verify client was created ok. + + var i1 = client.addSoapHeader('about-to-change-1'); + var i2 = client.addSoapHeader('about-to-change-2'); + + assert.ok(i1 === 0); + assert.ok(i2 === 1); + assert.ok(client.getSoapHeaders().length === 2); + + client.changeSoapHeader(0,'header1'); + client.changeSoapHeader(1,'header2'); + assert.ok(client.getSoapHeaders()[0].xml === 'header1'); + assert.ok(client.getSoapHeaders()[1].xml === 'header2'); + + client.clearSoapHeaders(); + assert.ok(client.getSoapHeaders().length === 0); + done(); + }); + }); + }); + describe('Headers in request and last response', function() { var server = null; var hostname = '127.0.0.1'; @@ -268,8 +330,8 @@ describe('SOAP Client', function() { //lastRequest should have proper header value of above JSON header object serialized based on header schema defined //in default-namespace1.wsdl - var lastRequest = "\n\n \n \n false\n" - + " true\n true\n true\n true\n \n true\n true\n \n" + var lastRequest = "\n\n \n \n false\n" + + " true\n true\n true\n true\n \n true\n true\n \n" + " \n \n \n"; client.MyOperation({}, function(err, result) { //using lastRequest instead of lastRequestHeaders() since this doesn't contain soap header which this test case needs to test. From 4e1de879d8f435080166fe1160d88e7963b556f7 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 6 Aug 2018 07:15:39 -0700 Subject: [PATCH 34/89] 1.12.0 * Create client from cached wsdl (Jon Roberts) * add forgotten options to soap.listen(...) (Vladimir Latyshev) --- CHANGES.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index d599ca34..d898670d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,11 @@ +2018-08-06, Version 1.12.0 +========================== + + * Create client from cached wsdl (Jon Roberts) + + * add forgotten options to soap.listen(...) (Vladimir Latyshev) + + 2018-07-10, Version 1.11.0 ========================== diff --git a/package.json b/package.json index 1a643e8a..0301c676 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.11.0", + "version": "1.12.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From 03678de0eb46b3fe4fd3e0b09ed293345a3cb2c5 Mon Sep 17 00:00:00 2001 From: Jon Roberts Date: Mon, 6 Aug 2018 16:28:17 +0100 Subject: [PATCH 35/89] Allow documentation tag under types --- src/parser/wsdl/types.js | 20 ++++++++++++-------- test/wsdl/wsdlImport/sub.wsdl | 1 + 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/parser/wsdl/types.js b/src/parser/wsdl/types.js index 818f832a..2ee96811 100644 --- a/src/parser/wsdl/types.js +++ b/src/parser/wsdl/types.js @@ -3,6 +3,7 @@ var WSDLElement = require('./wsdlElement'); var assert = require('assert'); var Schema = require('../xsd/schema'); +var Documentation = require('./documentation'); class Types extends WSDLElement { constructor(nsName, attrs, options) { @@ -11,16 +12,19 @@ class Types extends WSDLElement { } addChild(child) { - assert(child instanceof Schema); + assert(child instanceof Schema || child instanceof Documentation); - var targetNamespace = child.$targetNamespace; + if (child instanceof Schema) { - if (!this.schemas.hasOwnProperty(targetNamespace)) { - this.schemas[targetNamespace] = child; - } else { - // types might have multiple schemas with the same target namespace, - // including no target namespace - this.schemas[targetNamespace].merge(child, true); + var targetNamespace = child.$targetNamespace; + + if (!this.schemas.hasOwnProperty(targetNamespace)) { + this.schemas[targetNamespace] = child; + } else { + // types might have multiple schemas with the same target namespace, + // including no target namespace + this.schemas[targetNamespace].merge(child, true); + } } }; } diff --git a/test/wsdl/wsdlImport/sub.wsdl b/test/wsdl/wsdlImport/sub.wsdl index 7d75b935..faf8fd15 100644 --- a/test/wsdl/wsdlImport/sub.wsdl +++ b/test/wsdl/wsdlImport/sub.wsdl @@ -5,6 +5,7 @@ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + Add some details about these types. Date: Wed, 8 Aug 2018 14:56:11 -0700 Subject: [PATCH 36/89] 1.12.1 * Allow documentation tag under types (Jon Roberts) --- CHANGES.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index d898670d..6ef5a4c2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +2018-08-08, Version 1.12.1 +========================== + + * Allow documentation tag under types (Jon Roberts) + + 2018-08-06, Version 1.12.0 ========================== diff --git a/package.json b/package.json index 0301c676..24246666 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.12.0", + "version": "1.12.1", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From 49d19a8ed6233bf17c7ca8f7930cbd39783ec42a Mon Sep 17 00:00:00 2001 From: Vineet Jain Date: Sun, 29 Jul 2018 01:12:37 +0100 Subject: [PATCH 37/89] Support of sending soapAction in v1.2 Support for sending the soapAction in v1.2 if WSDL has mandated the soapAction through soapActionRequired flag --- src/client.js | 2 +- src/parser/wsdl/operation.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client.js b/src/client.js index 07aa0f44..c9bb8052 100644 --- a/src/client.js +++ b/src/client.js @@ -141,7 +141,7 @@ class Client extends Base { soapAction = ((ns.lastIndexOf("/") !== ns.length - 1) ? ns + "/" : ns) + name; } - if (soapVersion !== '1.2') { + if (soapVersion !== '1.2' || operation.soapActionRequired === "true") { headers.SOAPAction = '"' + soapAction + '"'; } diff --git a/src/parser/wsdl/operation.js b/src/parser/wsdl/operation.js index a0cc114e..9e2ed73a 100644 --- a/src/parser/wsdl/operation.js +++ b/src/parser/wsdl/operation.js @@ -42,6 +42,7 @@ class Operation extends WSDLElement { case 'operation': // soap:operation this.soapAction = child.$soapAction || ''; this.style = child.$style || ''; + this.soapActionRequired = child.$soapActionRequired || 'false'; //figure out from the binding operation soap version 1.1 or 1.2 if (child.nsURI === 'http://schemas.xmlsoap.org/wsdl/soap/') { this.soapVersion ='1.1'; From cce8a4a9a3ee85e2c29ad89b6a1e5525614fbcd3 Mon Sep 17 00:00:00 2001 From: Vineet Jain Date: Mon, 13 Aug 2018 06:30:14 +0100 Subject: [PATCH 38/89] changed this.soapActionRequired to boolean --- src/client.js | 2 +- src/parser/wsdl/operation.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client.js b/src/client.js index c9bb8052..a1fff426 100644 --- a/src/client.js +++ b/src/client.js @@ -141,7 +141,7 @@ class Client extends Base { soapAction = ((ns.lastIndexOf("/") !== ns.length - 1) ? ns + "/" : ns) + name; } - if (soapVersion !== '1.2' || operation.soapActionRequired === "true") { + if (soapVersion !== '1.2' || operation.soapActionRequired) { headers.SOAPAction = '"' + soapAction + '"'; } diff --git a/src/parser/wsdl/operation.js b/src/parser/wsdl/operation.js index 9e2ed73a..d6b7f5bc 100644 --- a/src/parser/wsdl/operation.js +++ b/src/parser/wsdl/operation.js @@ -42,7 +42,7 @@ class Operation extends WSDLElement { case 'operation': // soap:operation this.soapAction = child.$soapAction || ''; this.style = child.$style || ''; - this.soapActionRequired = child.$soapActionRequired || 'false'; + this.soapActionRequired = child.$soapActionRequired === 'true' || child.$soapActionRequired === '1' || false; //figure out from the binding operation soap version 1.1 or 1.2 if (child.nsURI === 'http://schemas.xmlsoap.org/wsdl/soap/') { this.soapVersion ='1.1'; From 7c924a688649d24caeb3b6d693ad917e7e33998c Mon Sep 17 00:00:00 2001 From: biniam Date: Fri, 17 Aug 2018 10:44:51 -0400 Subject: [PATCH 39/89] fix: use proper variable names --- example/xsds.js | 2 +- src/parser/xsd/element.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/example/xsds.js b/example/xsds.js index 89ab99ad..fe22d203 100644 --- a/example/xsds.js +++ b/example/xsds.js @@ -6,7 +6,7 @@ var path = require('path'); //user can pass in WSDL options var options = {}; -WSDL.open('./wsdls/weather.wsdl', options, +WSDL.open(path.resolve(__dirname, 'wsdls/weather.wsdl'), options, //User can traverse the WSDL tree and get to bindings - > operations, services, portTypes, messages, parts and XSD elements/Attributes function(err, wsdl) { var getCityForecastOp = wsdl.definitions.bindings.WeatherSoap.operations.GetCityForecastByZIP; diff --git a/src/parser/xsd/element.js b/src/parser/xsd/element.js index d17fddb6..347e03ad 100644 --- a/src/parser/xsd/element.js +++ b/src/parser/xsd/element.js @@ -52,7 +52,7 @@ class Element extends XSDElement { if (typeDescriptor) { descriptor.elements = typeDescriptor.elements; descriptor.attributes = typeDescriptor.attributes; - definitions.mixed = typeDescriptor.mixed; + descriptor.mixed = typeDescriptor.mixed; descriptor.extension = typeDescriptor.extension; if(descriptor.extension && descriptor.extension.isSimple === true) { descriptor.isSimple = true; @@ -73,7 +73,7 @@ class Element extends XSDElement { if (childDescriptor) { descriptor.elements = childDescriptor.elements; descriptor.attributes = childDescriptor.attributes; - definitions.mixed = childDescriptor.mixed; + descriptor.mixed = childDescriptor.mixed; } break; } else if (child instanceof SimpleType) { From 0a004d3bfd18167e8d0ec9164a2b7fac304eb3a4 Mon Sep 17 00:00:00 2001 From: Jiri Spac Date: Tue, 21 Aug 2018 15:23:34 +0200 Subject: [PATCH 40/89] fix code blocks in readme.md with their type --- README.md | 82 +++++++++++++++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index f8d92140..620edafa 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ Start with the WSDL for the web service you want to invoke. For example, the sto Create a new SOAP client from WSDL URL using `soap.createClient(url[, options], callback)`. Also supports a local file system path. An instance of `Client` is passed to the `soap.createClient` callback. It is used to execute methods on the soap service. -``` +```js "use strict"; var soap = require('strong-soap').soap; @@ -101,7 +101,7 @@ soap.createClient(url, options, function(err, client) { As well as creating a client via a `url`, an existing [WSDL](#wsdl) object can be passed in via `options.WSDL_CACHE`. -``` +```js var soap = require('strong-soap').soap; var WSDL = soap.WSDL; @@ -139,7 +139,7 @@ WSDL.open(url,options, The Request envelope created by above service invocation: -``` +```xml @@ -169,7 +169,7 @@ Note: for versions of node >0.10.X, you may need to specify `{connection: 'keep- User can define extra HTTP headers to be sent on the request. -``` +```js var clientOptions = {}; soap.createClient(url, clientOptions, function(err, client) { var customRequestHeader = {customheader1: 'test1'}; @@ -186,7 +186,7 @@ soap.createClient(url, clientOptions, function(err, client) { Describes services, ports and methods as a JavaScript object. -```javascript +```js // Describes the entire WSDL in a JSON tree object form. var description = client.describe(); // Inspect GetQuote operation. You can inspect Service: {Port: {operation: { @@ -203,7 +203,7 @@ Refer to test case [ssl-test](https://github.com/strongloop/strong-soap/blob/mas Call *method* on the SOAP service. -``` javascript +```js client.MyFunction({name: 'value'}, function(err, result, envelope, soapHeader) { // Result is a javascript object // Envelope is the response envelope from the Web Service @@ -213,7 +213,7 @@ Call *method* on the SOAP service. A *method* can also be called as a promise. -``` javascript +```js client.MyFunction({name: 'value'}).then(function({result, envelope, soapHeader}){ // ... }, function(err) { @@ -232,7 +232,7 @@ A *method* can also be called as a promise. Call a *method* using a specific *service* and *port*. -``` javascript +```js client.MyService.MyPort.MyFunction({name: 'value'}, function(err, result) { // Result is a JavaScript object }) @@ -244,7 +244,7 @@ Call a *method* using a specific *service* and *port*. For example, you could set a timeout of 5 seconds on the request like this: -``` javascript +```js client.MyService.MyPort.MyFunction({name: 'value'}, function(err, result) { // result is a javascript object }, {timeout: 5000}) @@ -252,7 +252,7 @@ Call a *method* using a specific *service* and *port*. You can measure the elapsed time on the request by passing the time option: -``` javascript +```js client.MyService.MyPort.MyFunction({name: 'value'}, function(err, result) { // client.lastElapsedTime - the elapsed time of the last request in milliseconds }, {time: true}) @@ -262,7 +262,7 @@ You can measure the elapsed time on the request by passing the time option: To align method call signature with Node's standard callback-last pattern and eventually allow promisification of method calls, the following method signatures are also supported: -```javascript +```js client.MyService.MyPort.MyFunction({name: 'value'}, options, function (err, result) { // result is a javascript object }) @@ -297,7 +297,7 @@ For an example of using this API, see [ssl-test](https://github.com/strongloop/ Here is an example of 'soapError' event -``` +```js soap.createClient(__dirname + '/wsdl/default_namespace.wsdl', function (err, client) { var didEmitEvent = false; client.on('soapError', function(err) { @@ -321,13 +321,13 @@ as well. The interface is quite simple. Each protocol defines two methods: ### BasicAuthSecurity -``` javascript +```js client.setSecurity(new soap.BasicAuthSecurity('username', 'password')); ``` ### BearerSecurity -``` javascript +```js client.setSecurity(new soap.BearerSecurity('token')); ``` @@ -339,7 +339,7 @@ as default request options to the constructor: * `strictSSL: false` * `secureOptions: constants.SSL_OP_NO_TLSv1_2` (this is likely needed for node >= 10.0) -``` javascript +```js client.setSecurity(new soap.ClientSSLSecurity( '/path/to/key' , '/path/to/cert' @@ -351,7 +351,7 @@ as default request options to the constructor: `WSSecurity` implements WS-Security. UsernameToken and PasswordText/PasswordDigest is supported. -``` javascript +```js var wsSecurity = new WSSecurity(username, password, options) //the 'options' object is optional and contains properties: //passwordType: 'PasswordDigest' or 'PasswordText' default is PasswordText @@ -364,7 +364,7 @@ as default request options to the constructor: WS-Security X509 Certificate support. -``` javascript +```js var privateKey = fs.readFileSync(privateKeyPath); var publicKey = fs.readFileSync(publicKeyPath); var password = ''; // optional password @@ -381,7 +381,7 @@ _Note_: Optional dependency 'ursa' is required to be installed successfully when To override the default behavior of `strong-soap`, use the `wsdlOptions` object, passed in the `createClient()` method. The `wsdlOptions` has the following properties: -```javascript +```js var wsdlOptions = { attributesKey: 'theAttrs', valueKey: 'theVal', @@ -402,7 +402,7 @@ By default, `strong-soap` uses `$value` as key for any parsed XML value which ma could be some reserved word, or the `$` in general cannot be used for a key to start with. You can define your own `valueKey` by passing it in the `wsdl_options` to the createClient call like so: -```javascript +```js var wsdlOptions = { valueKey: 'theVal' }; @@ -417,7 +417,7 @@ As `valueKey`, `strong-soap` uses `$xml` as key. The xml key is used to pass XML Example : -```javascript +```js dom = { $xml: '' }; @@ -433,7 +433,7 @@ dom = { You can define your own `xmlKey` by passing it in the `wsdl_options` to the createClient call like this: -```javascript +```js var wsdlOptions = { xmlKey: 'theXml' }; @@ -447,7 +447,7 @@ soap.createClient(__dirname + '/wsdl/default_namespace.wsdl', wsdlOptions, funct You can achieve attributes like: -``` xml +```xml @@ -455,7 +455,7 @@ You can achieve attributes like: ``` By attaching an attributes object to a node. -``` javascript +```js { parentnode: { childnode: { @@ -476,7 +476,7 @@ However, "attributes" may be a reserved key for some systems that actually want In this case you can configure the attributes key in the `wsdlOptions` like this: -```javascript +```js var wsdlOptions = { attributesKey: '$attributes' }; @@ -484,7 +484,7 @@ var wsdlOptions = { Adding xsiType -``` +```js soap.createClient(__dirname + '/wsdl/default_namespace.wsdl', wsdlOptions, function (err, client) { client.*method*({ parentnode: { @@ -500,7 +500,7 @@ soap.createClient(__dirname + '/wsdl/default_namespace.wsdl', wsdlOptions, funct Removing the xsiType. The resulting Request shouldn't have the attribute xsiType -``` +```js soap.createClient(__dirname + '/wsdl/default_namespace.wsdl', wsdlOptions, function (err, client) { client.*method*({ parentnode: { @@ -522,8 +522,8 @@ XMLHandler enables you to to convert a JSON object to XML and XML to a JSON obje API to convert JSON object to XML and XML to JSON object: -``` - var soap = require('..').soap; +```js +var soap = require('..').soap; var XMLHandler = soap.XMLHandler; var xmlHandler = new XMLHandler(); var util = require('util'); @@ -554,7 +554,7 @@ soap.createClient(url, clientOptions, function(err, client) { Parse XML string or stream into the XMLBuilder tree: -``` +```js var root = XMLHandler.parseXml(null, xmlString); ``` @@ -570,7 +570,7 @@ Parameters: - `options` WSDL options - `callback` Error and WSDL loaded into object tree. -``` +```js var soap = require('..').soap; var WSDL = soap.WSDL; var path = require('path'); @@ -601,7 +601,7 @@ Creates a new SOAP server that listens on *path* and provides *services*. *wsdl* is an xml string that defines the service. -``` javascript +```js var myService = { MyService: { MyPort: { @@ -653,7 +653,7 @@ An example of using the SOAP server is in [test/server-client-document-test](htt You can pass in server and [WSDL Options](#handling-xml-attributes-value-and-xml-wsdloptions) using an options hash. -``` javascript +```js var xml = require('fs').readFileSync('myservice.wsdl', 'utf8'); soap.listen(server, { @@ -674,7 +674,7 @@ soap.listen(server, { If the `log` method is defined it will be called with 'received' and 'replied' along with data. -``` javascript +```js server = soap.listen(...) server.log = function(type, data) { // type is 'received' or 'replied' @@ -693,7 +693,7 @@ Server instances emit the following events: The sequence order of the calls is `request`, `headers` and then the dedicated service method. -``` +```js test.soapServer.on('request', function requestManager(request, methodName) { assert.equal(methodName, 'GetLastTradePrice'); done(); @@ -710,7 +710,7 @@ object with a `Fault` property. Example SOAP 1.1 Fault: -``` javascript +```js test.service = { DocLiteralWrappedService: { DocLiteralWrappedPort: { @@ -733,7 +733,7 @@ Example SOAP 1.1 Fault: SOAP 1.2 Fault: -``` javascript +```js test.service = { DocLiteralWrappedService: { DocLiteralWrappedPort: { @@ -764,7 +764,7 @@ Examples of SOAP 1.1/SOAP 1.2 Fault response can be found in test [test/server- If `server.authenticate` is not defined then no authentication will take place. -``` javascript +```js server = soap.listen(...) server.authenticate = function(security) { var created, nonce, password, user, token; @@ -780,7 +780,7 @@ The `server.authorizeConnection` method is called prior to the soap service meth If the method is defined and returns `false` then the incoming connection is terminated. -``` javascript +```js server = soap.listen(...) server.authorizeConnection = function(req) { return true; // or false @@ -794,7 +794,7 @@ terminated. A service method can look at the SOAP headers by providing a third arguments. -``` javascript +```js { HeadersAwareFunction: function(args, cb, headers) { return { @@ -808,7 +808,7 @@ It is also possible to subscribe to the 'headers' event. The event is triggered before the service method is called, and only when the SOAP Headers are not empty. -``` javascript +```js server = soap.listen(...) server.on('headers', function(headers, methodName) { // It is possible to change the value of the headers @@ -869,7 +869,7 @@ your clients. ### Example -```javascript +```js var sinon = require('sinon'); var soapStub = require('strong-soap/soap-stub'); From 22772f39c676553ae17764adbec35ccc8f9d54f3 Mon Sep 17 00:00:00 2001 From: DomStorey Date: Fri, 14 Sep 2018 17:37:12 +0100 Subject: [PATCH 41/89] Add the ability to loadSync --- README.md | 12 +++ src/parser/wsdl.js | 110 ++++++++++++++++++++++--- test/wsdl-load-from-memory-test.js | 128 ++++++++++++++++++++++++----- 3 files changed, 218 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 620edafa..35a8d054 100644 --- a/README.md +++ b/README.md @@ -593,6 +593,18 @@ WSDL.open('./wsdls/stockquote.wsdl',options, }); ``` +### wsdl.openSync(wsdlURL, options) + +Loads WSDL into a tree form directly from memory. It traverses through WSDL tree to get to bindings, services, ports, operations, and so on as long as you have your dependent WSDLs and schemas are loaded and available in the `options.WSDL_CACHE`. If any I/O is required to retrieve any dependencies this call will throw an error. + +Parameters: + +- `wsdlURL` WSDL url to load as named in the cache. +- `options` WSDL options + +An example of loading WSDLs into your `options.WSDL_CACHE` and calling `wsdl.loadSync()` can be found in the test [test/wsdl-load-from-memory-test](https://github.com/strongloop/strong-soap/tree/master/test/wsdl-load-from-memory-test.js) + + ## Server ### soap.listen(*server*, *path*, *services*, *wsdl*) diff --git a/src/parser/wsdl.js b/src/parser/wsdl.js index 03f668a7..d25cd087 100644 --- a/src/parser/wsdl.js +++ b/src/parser/wsdl.js @@ -34,8 +34,24 @@ class WSDL { this.WSDL_CACHE = (options || {}).WSDL_CACHE || {}; this._initializeOptions(options); } - + load(callback) { + this._loadAsyncOrSync(false, function (err, wsdl) { + callback(err,wsdl); + }); + } + + loadSync() { + var result; + this._loadAsyncOrSync(true, function (err, wsdl) { + result = wsdl; + }); + // This is not intuitive but works as the load function and its callback all are executed before the + // loadSync function returns. The outcome here is that the following result is always set correctly. + return result; + } + + _loadAsyncOrSync(syncLoad, callback) { var self = this; var definition = this.content; let fromFunc; @@ -50,14 +66,14 @@ class WSDL { // register that this WSDL has started loading self.isLoaded = true; - process.nextTick(function() { + var loadUpSchemas = function(syncLoad) { try { fromFunc.call(self, definition); } catch (e) { return callback(e); } - self.processIncludes(function(err) { + self.processIncludes(syncLoad, function(err) { var name; if (err) { return callback(err); @@ -104,8 +120,13 @@ class WSDL { self.xmlnsInEnvelope = self._xmlnsMap(); callback(err, self); }); + } - }); + if (syncLoad) { + loadUpSchemas(true); + } else { + process.nextTick(loadUpSchemas); + } } _initializeOptions(options) { @@ -152,7 +173,7 @@ class WSDL { } } - _processNextInclude(includes, callback) { + _processNextInclude(syncLoad, includes, callback) { debugInclude('includes/imports: ', includes); var self = this, include = includes.shift(), @@ -161,6 +182,11 @@ class WSDL { if (!include) return callback(); + // if undefined treat as "" to make path.dirname return '.' as errors on non string below + if (!self.uri) { + self.uri=''; + } + var includePath; if (!/^https?:/.test(self.uri) && !/^https?:/.test(include.location)) { includePath = path.resolve(path.dirname(self.uri), include.location); @@ -175,7 +201,7 @@ class WSDL { options.ignoredNamespaces = this._originalIgnoredNamespaces || this.options.ignoredNamespaces; options.WSDL_CACHE = this.WSDL_CACHE; - WSDL.load(includePath, options, function(err, wsdl) { + var staticLoad = function(syncLoad, err, wsdl) { if (err) { return callback(err); } @@ -191,7 +217,7 @@ class WSDL { delete wsdl.definitions.schemas[undefined]; } } - _.mergeWith(self.definitions, wsdl.definitions, function(a, b) { + _.mergeWith(self.definitions, wsdl.definitions, function (a, b) { if (a === b) { return a; } @@ -203,13 +229,24 @@ class WSDL { deepMerge(self.definitions.schemas[include.namespace || wsdl.definitions.$targetNamespace], wsdl.definitions); } - self._processNextInclude(includes, function(err) { + self._processNextInclude(syncLoad, includes, function (err) { callback(err); }); - }); + }; + + if (syncLoad) { + var wsdl = WSDL.loadSync(includePath, options); + staticLoad(true, null, wsdl); + } else { + WSDL.load(includePath, options, function (err, wsdl) { + staticLoad(false, err, wsdl); + }); + + } + } - processIncludes(callback) { + processIncludes(syncLoad, callback) { var schemas = this.definitions.schemas, includes = []; @@ -218,7 +255,7 @@ class WSDL { includes = includes.concat(schema.includes || []); } - this._processNextInclude(includes, callback); + this._processNextInclude(syncLoad, includes, callback); } describeServices() { @@ -443,6 +480,57 @@ class WSDL { return wsdl; } + static loadSync(uri, options) { + var fromCache, + WSDL_CACHE; + + if (!options) { + options = {}; + } + + WSDL_CACHE = options.WSDL_CACHE; + + if (fromCache = WSDL_CACHE[uri]) { + /** + * Only return from the cache is the document is fully (or partially) + * loaded. This allows the contents of a document to have been read + * into the cache, but with no processing performed on it yet. + */ + if(fromCache.isLoaded){ + return fromCache; + } + } + + return WSDL.openSync(uri, options); + } + + static openSync(uri, options) { + if (!options) { + options = {}; + } + + // initialize cache when calling open directly + var WSDL_CACHE = options.WSDL_CACHE || {}; + var request_headers = options.wsdl_headers; + var request_options = options.wsdl_options; + + debug('wsdl open. request_headers: %j request_options: %j', request_headers, request_options); + var wsdl; + var fromCache = WSDL_CACHE[uri]; + /** + * If the file is fully loaded in the cache, return it. + * Otherwise throw an error as we cannot load this in a sync way as we would need to perform IO + * either to the filesystem or http + */ + if (fromCache && !fromCache.isLoaded) { + wsdl = fromCache.loadSync(); + } else { + throw(uri+" was not found in the cache. For loadSync() calls all schemas must be preloaded into the cache"); + } + + return wsdl; + } + static loadSystemSchemas(callback) { var xsdDir = path.join(__dirname, '../../xsds/'); var done = false; diff --git a/test/wsdl-load-from-memory-test.js b/test/wsdl-load-from-memory-test.js index d97a4636..c7b32c8d 100644 --- a/test/wsdl-load-from-memory-test.js +++ b/test/wsdl-load-from-memory-test.js @@ -10,19 +10,40 @@ describe('wsdl-load-from-memory-tests', function() { describe('should load the wsdl from memory', function () { - var stockQuoteWsdlContents + var stockQuoteWsdlContents; + var mainWsdlContents; beforeEach(function (done) { - // Read the contents of the WSDL from the file system - fs.readFile(__dirname + '/wsdl/from-memory/stockquote.wsdl', 'utf8', function (err, definition) { - if (err) { - done(err) - } else { - stockQuoteWsdlContents = definition; - done() - } - }); + var promiseList = []; + + promiseList.push(new Promise(function (resolve, reject) { + fs.readFile(__dirname + '/wsdl/from-memory/stockquote.wsdl', 'utf8', function (err, definition) { + if (err) { + reject(err); + } else { + stockQuoteWsdlContents = definition; + resolve(stockQuoteWsdlContents); + } + }) + })); + + promiseList.push(new Promise(function (resolve, reject) { + fs.readFile(__dirname + '/wsdl/from-memory/main.wsdl', 'utf8', function (err, definition) { + if (err) { + reject(err) + } else { + mainWsdlContents = definition; + resolve(mainWsdlContents) + } + }) + })); + + Promise.all(promiseList).then(function () { + done(); + }) + + }); it('should load a wsdl with no imports directly from memory', function (done) { @@ -35,10 +56,44 @@ describe('wsdl-load-from-memory-tests', function() { // Load the wsdl fully once its been created in memory stockQuoteWsdl.load(function () { - assert.equal(stockQuoteWsdl.definitions['$name'], "StockQuote") - done() + assert.equal(stockQuoteWsdl.definitions['$name'], "StockQuote"); + done(); }) }); + + it('should load a wsdl synchronously with no imports directly from memory or should honour synchronous loading of a wsdl', function (done) { + + var options = { + WSDL_CACHE: {} + }; + // Create the initial wsdl directly + var stockQuoteWsdl = new WSDL(stockQuoteWsdlContents, undefined, options); + + // Load the wsdl fully once its been created in memory in a sync manner + var checkwsdl = stockQuoteWsdl.loadSync(); + assert.equal(checkwsdl.definitions['$name'], "StockQuote"); + done(); + }); + + it('should fail to load a wsdl synchronously as wsdl not present in memory', function (done) { + + var options = { + WSDL_CACHE: {} + }; + // Create the initial wsdl directly + var mainWsdl = new WSDL(mainWsdlContents, undefined, options); + + // Load the wsdl fully once its been created in memory in a sync manner which will fail as there + // are unresolved imports which would need I/O to resolve + try { + var checkwsdl = mainWsdl.loadSync(); + } catch(err) { + console.log(err) + // check error thrown + assert.ok(err.indexOf('For loadSync() calls all schemas must be preloaded into the cache') > -1 ); + done(); + } + }); }); describe('should load a multipart wsdl from the cache', function () { @@ -49,7 +104,7 @@ describe('wsdl-load-from-memory-tests', function() { beforeEach(function (done) { var filePrefix = __dirname + '/wsdl/from-memory/multipart/'; - var promiseList = [] + var promiseList = []; /** * Read the contents of each of the files from the multipart directory */ @@ -57,7 +112,7 @@ describe('wsdl-load-from-memory-tests', function() { promiseList.push(new Promise(function (resolve, reject) { fs.readFile(filePrefix + fileName, 'utf8', function (err, definition) { if (err) { - reject(err) + reject(err); } else { /** * Create a WSDL object for each of the files and store them @@ -66,16 +121,16 @@ describe('wsdl-load-from-memory-tests', function() { // This path name isn't the correct one, however it is what the strong-soap // implementation will default to when it comes to checking the cache. - var includePath = path.resolve(fileName) - var wsdl = new WSDL(definition, includePath, options) - options.WSDL_CACHE[includePath] = wsdl - wsdl.WSDL_CACHE = options.WSDL_CACHE - resolve(wsdl) + var includePath = path.resolve(fileName); + var wsdl = new WSDL(definition, includePath, options); + options.WSDL_CACHE[includePath] = wsdl; + wsdl.WSDL_CACHE = options.WSDL_CACHE; + resolve(wsdl); } }) })) }); - Promise.all(promiseList).then(function (values) { + Promise.all(promiseList).then(function () { done(); }) @@ -94,7 +149,7 @@ describe('wsdl-load-from-memory-tests', function() { /** * Load the starting point wsdl from memory. Put in an incorrect uri as this should be loaded from the CACHE */ - var wsdlDefinition = new WSDL(definition, 'startingWsdlUri', options) + var wsdlDefinition = new WSDL(definition, 'startingWsdlUri', options); /** * The load() function should take into account wsdls which have had their definitions loaded into the WSDL_CACHE, @@ -111,6 +166,37 @@ describe('wsdl-load-from-memory-tests', function() { }) }) }) + + + it('a multipart wsdl should load from the cache in a sync way with no errors', function(done){ + /** + * Read in a file wsdl file containing a definition. For the purpose of this test this file should be one that is + * in the WSDL_CACHE already, but loaded from a different location. The reason for the different location is that + * the this will show that the additional wsdls and xsd files are being read from the cache and not just from the + * relative path on the file system. + */ + fs.readFile(__dirname + '/wsdl/from-memory/main.wsdl', 'utf8', function (err, definition) { + + assert.ok(!err); + /** + * Load the starting point wsdl from memory. Put in an incorrect uri as this should be loaded from the CACHE + */ + var wsdlDefinition = new WSDL(definition, 'startingWsdlUri', options); + + /** + * The load() function should take into account wsdls which have had their definitions loaded into the WSDL_CACHE, + * but still needs to be fully parsed and loaded. + */ + var loadedWsdl = wsdlDefinition.loadSync(); + assert(loadedWsdl); + assert(loadedWsdl.definitions); + assert.notDeepEqual(loadedWsdl.definitions.bindings, {}, "Bindings not loaded on wsdl"); + assert.notDeepEqual(loadedWsdl.definitions.services, {}, "Services not loaded on wsdl"); + assert.notDeepEqual(loadedWsdl.definitions.portTypes, {}, "PortTypes not loaded on wsdl"); + done(); + }) + }) + }); }); From 9993f8dc0043398077525c09430db55d00c83614 Mon Sep 17 00:00:00 2001 From: DomStorey Date: Thu, 30 Aug 2018 17:31:57 +0100 Subject: [PATCH 42/89] Add ability to load in a sync way --- README.md | 12 +++ src/parser/wsdl.js | 110 ++++++++++++++++++++++--- test/wsdl-load-from-memory-test.js | 128 ++++++++++++++++++++++++----- 3 files changed, 218 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 620edafa..35a8d054 100644 --- a/README.md +++ b/README.md @@ -593,6 +593,18 @@ WSDL.open('./wsdls/stockquote.wsdl',options, }); ``` +### wsdl.openSync(wsdlURL, options) + +Loads WSDL into a tree form directly from memory. It traverses through WSDL tree to get to bindings, services, ports, operations, and so on as long as you have your dependent WSDLs and schemas are loaded and available in the `options.WSDL_CACHE`. If any I/O is required to retrieve any dependencies this call will throw an error. + +Parameters: + +- `wsdlURL` WSDL url to load as named in the cache. +- `options` WSDL options + +An example of loading WSDLs into your `options.WSDL_CACHE` and calling `wsdl.loadSync()` can be found in the test [test/wsdl-load-from-memory-test](https://github.com/strongloop/strong-soap/tree/master/test/wsdl-load-from-memory-test.js) + + ## Server ### soap.listen(*server*, *path*, *services*, *wsdl*) diff --git a/src/parser/wsdl.js b/src/parser/wsdl.js index 03f668a7..d25cd087 100644 --- a/src/parser/wsdl.js +++ b/src/parser/wsdl.js @@ -34,8 +34,24 @@ class WSDL { this.WSDL_CACHE = (options || {}).WSDL_CACHE || {}; this._initializeOptions(options); } - + load(callback) { + this._loadAsyncOrSync(false, function (err, wsdl) { + callback(err,wsdl); + }); + } + + loadSync() { + var result; + this._loadAsyncOrSync(true, function (err, wsdl) { + result = wsdl; + }); + // This is not intuitive but works as the load function and its callback all are executed before the + // loadSync function returns. The outcome here is that the following result is always set correctly. + return result; + } + + _loadAsyncOrSync(syncLoad, callback) { var self = this; var definition = this.content; let fromFunc; @@ -50,14 +66,14 @@ class WSDL { // register that this WSDL has started loading self.isLoaded = true; - process.nextTick(function() { + var loadUpSchemas = function(syncLoad) { try { fromFunc.call(self, definition); } catch (e) { return callback(e); } - self.processIncludes(function(err) { + self.processIncludes(syncLoad, function(err) { var name; if (err) { return callback(err); @@ -104,8 +120,13 @@ class WSDL { self.xmlnsInEnvelope = self._xmlnsMap(); callback(err, self); }); + } - }); + if (syncLoad) { + loadUpSchemas(true); + } else { + process.nextTick(loadUpSchemas); + } } _initializeOptions(options) { @@ -152,7 +173,7 @@ class WSDL { } } - _processNextInclude(includes, callback) { + _processNextInclude(syncLoad, includes, callback) { debugInclude('includes/imports: ', includes); var self = this, include = includes.shift(), @@ -161,6 +182,11 @@ class WSDL { if (!include) return callback(); + // if undefined treat as "" to make path.dirname return '.' as errors on non string below + if (!self.uri) { + self.uri=''; + } + var includePath; if (!/^https?:/.test(self.uri) && !/^https?:/.test(include.location)) { includePath = path.resolve(path.dirname(self.uri), include.location); @@ -175,7 +201,7 @@ class WSDL { options.ignoredNamespaces = this._originalIgnoredNamespaces || this.options.ignoredNamespaces; options.WSDL_CACHE = this.WSDL_CACHE; - WSDL.load(includePath, options, function(err, wsdl) { + var staticLoad = function(syncLoad, err, wsdl) { if (err) { return callback(err); } @@ -191,7 +217,7 @@ class WSDL { delete wsdl.definitions.schemas[undefined]; } } - _.mergeWith(self.definitions, wsdl.definitions, function(a, b) { + _.mergeWith(self.definitions, wsdl.definitions, function (a, b) { if (a === b) { return a; } @@ -203,13 +229,24 @@ class WSDL { deepMerge(self.definitions.schemas[include.namespace || wsdl.definitions.$targetNamespace], wsdl.definitions); } - self._processNextInclude(includes, function(err) { + self._processNextInclude(syncLoad, includes, function (err) { callback(err); }); - }); + }; + + if (syncLoad) { + var wsdl = WSDL.loadSync(includePath, options); + staticLoad(true, null, wsdl); + } else { + WSDL.load(includePath, options, function (err, wsdl) { + staticLoad(false, err, wsdl); + }); + + } + } - processIncludes(callback) { + processIncludes(syncLoad, callback) { var schemas = this.definitions.schemas, includes = []; @@ -218,7 +255,7 @@ class WSDL { includes = includes.concat(schema.includes || []); } - this._processNextInclude(includes, callback); + this._processNextInclude(syncLoad, includes, callback); } describeServices() { @@ -443,6 +480,57 @@ class WSDL { return wsdl; } + static loadSync(uri, options) { + var fromCache, + WSDL_CACHE; + + if (!options) { + options = {}; + } + + WSDL_CACHE = options.WSDL_CACHE; + + if (fromCache = WSDL_CACHE[uri]) { + /** + * Only return from the cache is the document is fully (or partially) + * loaded. This allows the contents of a document to have been read + * into the cache, but with no processing performed on it yet. + */ + if(fromCache.isLoaded){ + return fromCache; + } + } + + return WSDL.openSync(uri, options); + } + + static openSync(uri, options) { + if (!options) { + options = {}; + } + + // initialize cache when calling open directly + var WSDL_CACHE = options.WSDL_CACHE || {}; + var request_headers = options.wsdl_headers; + var request_options = options.wsdl_options; + + debug('wsdl open. request_headers: %j request_options: %j', request_headers, request_options); + var wsdl; + var fromCache = WSDL_CACHE[uri]; + /** + * If the file is fully loaded in the cache, return it. + * Otherwise throw an error as we cannot load this in a sync way as we would need to perform IO + * either to the filesystem or http + */ + if (fromCache && !fromCache.isLoaded) { + wsdl = fromCache.loadSync(); + } else { + throw(uri+" was not found in the cache. For loadSync() calls all schemas must be preloaded into the cache"); + } + + return wsdl; + } + static loadSystemSchemas(callback) { var xsdDir = path.join(__dirname, '../../xsds/'); var done = false; diff --git a/test/wsdl-load-from-memory-test.js b/test/wsdl-load-from-memory-test.js index d97a4636..c7b32c8d 100644 --- a/test/wsdl-load-from-memory-test.js +++ b/test/wsdl-load-from-memory-test.js @@ -10,19 +10,40 @@ describe('wsdl-load-from-memory-tests', function() { describe('should load the wsdl from memory', function () { - var stockQuoteWsdlContents + var stockQuoteWsdlContents; + var mainWsdlContents; beforeEach(function (done) { - // Read the contents of the WSDL from the file system - fs.readFile(__dirname + '/wsdl/from-memory/stockquote.wsdl', 'utf8', function (err, definition) { - if (err) { - done(err) - } else { - stockQuoteWsdlContents = definition; - done() - } - }); + var promiseList = []; + + promiseList.push(new Promise(function (resolve, reject) { + fs.readFile(__dirname + '/wsdl/from-memory/stockquote.wsdl', 'utf8', function (err, definition) { + if (err) { + reject(err); + } else { + stockQuoteWsdlContents = definition; + resolve(stockQuoteWsdlContents); + } + }) + })); + + promiseList.push(new Promise(function (resolve, reject) { + fs.readFile(__dirname + '/wsdl/from-memory/main.wsdl', 'utf8', function (err, definition) { + if (err) { + reject(err) + } else { + mainWsdlContents = definition; + resolve(mainWsdlContents) + } + }) + })); + + Promise.all(promiseList).then(function () { + done(); + }) + + }); it('should load a wsdl with no imports directly from memory', function (done) { @@ -35,10 +56,44 @@ describe('wsdl-load-from-memory-tests', function() { // Load the wsdl fully once its been created in memory stockQuoteWsdl.load(function () { - assert.equal(stockQuoteWsdl.definitions['$name'], "StockQuote") - done() + assert.equal(stockQuoteWsdl.definitions['$name'], "StockQuote"); + done(); }) }); + + it('should load a wsdl synchronously with no imports directly from memory or should honour synchronous loading of a wsdl', function (done) { + + var options = { + WSDL_CACHE: {} + }; + // Create the initial wsdl directly + var stockQuoteWsdl = new WSDL(stockQuoteWsdlContents, undefined, options); + + // Load the wsdl fully once its been created in memory in a sync manner + var checkwsdl = stockQuoteWsdl.loadSync(); + assert.equal(checkwsdl.definitions['$name'], "StockQuote"); + done(); + }); + + it('should fail to load a wsdl synchronously as wsdl not present in memory', function (done) { + + var options = { + WSDL_CACHE: {} + }; + // Create the initial wsdl directly + var mainWsdl = new WSDL(mainWsdlContents, undefined, options); + + // Load the wsdl fully once its been created in memory in a sync manner which will fail as there + // are unresolved imports which would need I/O to resolve + try { + var checkwsdl = mainWsdl.loadSync(); + } catch(err) { + console.log(err) + // check error thrown + assert.ok(err.indexOf('For loadSync() calls all schemas must be preloaded into the cache') > -1 ); + done(); + } + }); }); describe('should load a multipart wsdl from the cache', function () { @@ -49,7 +104,7 @@ describe('wsdl-load-from-memory-tests', function() { beforeEach(function (done) { var filePrefix = __dirname + '/wsdl/from-memory/multipart/'; - var promiseList = [] + var promiseList = []; /** * Read the contents of each of the files from the multipart directory */ @@ -57,7 +112,7 @@ describe('wsdl-load-from-memory-tests', function() { promiseList.push(new Promise(function (resolve, reject) { fs.readFile(filePrefix + fileName, 'utf8', function (err, definition) { if (err) { - reject(err) + reject(err); } else { /** * Create a WSDL object for each of the files and store them @@ -66,16 +121,16 @@ describe('wsdl-load-from-memory-tests', function() { // This path name isn't the correct one, however it is what the strong-soap // implementation will default to when it comes to checking the cache. - var includePath = path.resolve(fileName) - var wsdl = new WSDL(definition, includePath, options) - options.WSDL_CACHE[includePath] = wsdl - wsdl.WSDL_CACHE = options.WSDL_CACHE - resolve(wsdl) + var includePath = path.resolve(fileName); + var wsdl = new WSDL(definition, includePath, options); + options.WSDL_CACHE[includePath] = wsdl; + wsdl.WSDL_CACHE = options.WSDL_CACHE; + resolve(wsdl); } }) })) }); - Promise.all(promiseList).then(function (values) { + Promise.all(promiseList).then(function () { done(); }) @@ -94,7 +149,7 @@ describe('wsdl-load-from-memory-tests', function() { /** * Load the starting point wsdl from memory. Put in an incorrect uri as this should be loaded from the CACHE */ - var wsdlDefinition = new WSDL(definition, 'startingWsdlUri', options) + var wsdlDefinition = new WSDL(definition, 'startingWsdlUri', options); /** * The load() function should take into account wsdls which have had their definitions loaded into the WSDL_CACHE, @@ -111,6 +166,37 @@ describe('wsdl-load-from-memory-tests', function() { }) }) }) + + + it('a multipart wsdl should load from the cache in a sync way with no errors', function(done){ + /** + * Read in a file wsdl file containing a definition. For the purpose of this test this file should be one that is + * in the WSDL_CACHE already, but loaded from a different location. The reason for the different location is that + * the this will show that the additional wsdls and xsd files are being read from the cache and not just from the + * relative path on the file system. + */ + fs.readFile(__dirname + '/wsdl/from-memory/main.wsdl', 'utf8', function (err, definition) { + + assert.ok(!err); + /** + * Load the starting point wsdl from memory. Put in an incorrect uri as this should be loaded from the CACHE + */ + var wsdlDefinition = new WSDL(definition, 'startingWsdlUri', options); + + /** + * The load() function should take into account wsdls which have had their definitions loaded into the WSDL_CACHE, + * but still needs to be fully parsed and loaded. + */ + var loadedWsdl = wsdlDefinition.loadSync(); + assert(loadedWsdl); + assert(loadedWsdl.definitions); + assert.notDeepEqual(loadedWsdl.definitions.bindings, {}, "Bindings not loaded on wsdl"); + assert.notDeepEqual(loadedWsdl.definitions.services, {}, "Services not loaded on wsdl"); + assert.notDeepEqual(loadedWsdl.definitions.portTypes, {}, "PortTypes not loaded on wsdl"); + done(); + }) + }) + }); }); From e7b429e8c3447fd308e7db4cc391da880bff3933 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Fri, 14 Sep 2018 19:41:24 -0700 Subject: [PATCH 43/89] Switch to strong-ursa to support Node 10 --- .npmignore | 2 ++ package.json | 2 +- src/security/WSSecurityCert.js | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.npmignore b/.npmignore index af199929..3c4bfac3 100644 --- a/.npmignore +++ b/.npmignore @@ -1,2 +1,4 @@ /test/ .idea +test +.travis.yml diff --git a/package.json b/package.json index 24246666..24cf748d 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "xmlbuilder": "^9.0.4" }, "optionalDependencies": { - "ursa": "^0.9.4" + "strong-ursa": "^0.10.1" }, "repository": { "type": "git", diff --git a/src/security/WSSecurityCert.js b/src/security/WSSecurityCert.js index d7229139..2aa6221b 100644 --- a/src/security/WSSecurityCert.js +++ b/src/security/WSSecurityCert.js @@ -2,7 +2,7 @@ var g = require('../globalize'); var optional = require('optional'); -var ursa = optional('ursa'); +var ursa = optional('strong-ursa'); var fs = require('fs'); var path = require('path'); var SignedXml = require('xml-crypto').SignedXml; From 77110809be1eea4e48b5a7f80ab4d6380a6a9e02 Mon Sep 17 00:00:00 2001 From: Runrioter Wung Date: Mon, 17 Sep 2018 09:58:32 +0800 Subject: [PATCH 44/89] Update` strong-globalize` to v4.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 24246666..0b09ee26 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "request": "^2.72.0", "sax": "^1.2", "selectn": "^1.0.20", - "strong-globalize": "^3.2.0", + "strong-globalize": "^4.1.1", "uuid": "^3.2.1", "xml-crypto": "^0.10.1", "xmlbuilder": "^9.0.4" From 835a7acfe6104a43d3c35c9902597ddc30d2dd6f Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 17 Sep 2018 09:15:10 -0700 Subject: [PATCH 45/89] Update ssl key/cert to pass node 10 --- .travis.yml | 1 + test/certs/agent2-cert.pem | 30 +++++++++++++++++++----------- test/certs/agent2-key.pem | 37 ++++++++++++++++++++++++++++--------- 3 files changed, 48 insertions(+), 20 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8a1e8870..7c5d2f6c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ notifications: node_js: - '6' - '8' + - '10' env: - CXX=g++-4.8 addons: diff --git a/test/certs/agent2-cert.pem b/test/certs/agent2-cert.pem index 8e4354db..ca9226e3 100644 --- a/test/certs/agent2-cert.pem +++ b/test/certs/agent2-cert.pem @@ -1,13 +1,21 @@ -----BEGIN CERTIFICATE----- -MIIB7DCCAZYCCQC7gs0MDNn6MTANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJV -UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO -BgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MjEgMB4GCSqGSIb3DQEJARYR -cnlAdGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEy -WjB9MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYD -VQQKEwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MjEg -MB4GCSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEF -AANLADBIAkEAyXb8FrRdKbhrKLgLSsn61i1C7w7fVVVd7OQsmV/7p9WB2lWFiDlC -WKGU9SiIz/A6wNZDUAuc2E+VwtpCT561AQIDAQABMA0GCSqGSIb3DQEBBQUAA0EA -C8HzpuNhFLCI3A5KkBS5zHAQax6TFUOhbpBCR0aTDbJ6F1liDTK1lmU/BjvPoj+9 -1LHwrmh29rK8kBPEjmymCQ== +MIIDaDCCAlACCQDSmMwp5CM+CzANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJV +UzELMAkGA1UECAwCQ0ExCzAJBgNVBAcMAlNGMQswCQYDVQQKDAJMQjEMMAoGA1UE +CwwDTEI0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHjAcBgkqhkiG9w0BCQEWD2xiNEBl +eGFtcGxlLmNvbTAeFw0xODA2MjgxNDMwNTdaFw0xOTA2MjgxNDMwNTdaMHYxCzAJ +BgNVBAYTAlVTMQswCQYDVQQIDAJDQTELMAkGA1UEBwwCU0YxCzAJBgNVBAoMAkxC +MQwwCgYDVQQLDANMQjQxEjAQBgNVBAMMCWxvY2FsaG9zdDEeMBwGCSqGSIb3DQEJ +ARYPbGI0QGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA3mV25nB7LprWwnw2esZbzuS9vG68Eqcjiu9K0ZO9Ym8al70Wz1Q7ytqfuP4c +DEjEAngvbkrT3W1ZaXUOQz5vxAa5OaLpB7moOZ3cldVyDTwlExBvFrXB5Qqrh/7Y +c7OVvtb3Dah1wzvRHEt8I0EXPnojjae2uxmTu3ThZqACcpZS5SQC3hA3VOmcRpMS +xKd8tvbbYYb37aaldOJkxcKge0C5adpOB8MsDvWZagBDCWaN41Wc/mER71Q1UMrz +BrGB0Let4IibvUcW5nlUlfzu9qjY6ZXdb4cTDA7q6xTHmaIwhLklsI/K2Mda1YC5 +aIu558Kxaq1e3RWb0Hl/RpEQSQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCSdHKL +juogGyAvUH0cAOahhvuUOnfpjcOWscRa1VLpI8lR9hWX5CLt3IIqT3gVFTl8bQbq +joOfUB+ArusERMtay8l/dI83l6BxOkjhz8IcKT89W5emsHPDk6l0DAMmcrZAgMM5 +Ow9Rt3M5dEJ7tY3xWS9WpM3WCSpou+4AZt9PLE/sCqSjkDCO0/+ao1Pr9HORP40n +NOPjSqMjlesUVlfJQTi0Rscal3BQG4+2cNG+p8KzR6KLEJruORuHzRqLWh3jkUKU +snB9FTDkj9kSq287SidEcF2tfi2X6ptAoxv/jdFx6unZ1q3wI0qSDZYaEAbwlO84 +q3Y/oEQkYu19Wzta -----END CERTIFICATE----- diff --git a/test/certs/agent2-key.pem b/test/certs/agent2-key.pem index 522903c6..dbbf628e 100644 --- a/test/certs/agent2-key.pem +++ b/test/certs/agent2-key.pem @@ -1,9 +1,28 @@ ------BEGIN RSA PRIVATE KEY----- -MIIBOgIBAAJBAMl2/Ba0XSm4ayi4C0rJ+tYtQu8O31VVXezkLJlf+6fVgdpVhYg5 -QlihlPUoiM/wOsDWQ1ALnNhPlcLaQk+etQECAwEAAQJBAMT6Bf34+UHKY1ObpsbH -9u2jsVblFq1rWvs8GPMY6oertzvwm3DpuSUp7PTgOB1nLTLYtCERbQ4ovtN8tn3p -OHUCIQDzIEGsoCr5vlxXvy2zJwu+fxYuhTZWMVuo1397L0VyhwIhANQh+yzqUgaf -WRtSB4T2W7ADtJI35ET61jKBty3CqJY3AiAIwju7dVW3A5WeD6Qc1SZGKZvp9yCb -AFI2BfVwwaY11wIgXF3PeGcvACMyMWsuSv7aPXHfliswAbkWuzcwA4TW01ECIGWa -cgsDvVFxmfM5NPSuT/UDTa6R5BFISB5ea0N0AR3I ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDeZXbmcHsumtbC +fDZ6xlvO5L28brwSpyOK70rRk71ibxqXvRbPVDvK2p+4/hwMSMQCeC9uStPdbVlp +dQ5DPm/EBrk5oukHuag5ndyV1XINPCUTEG8WtcHlCquH/thzs5W+1vcNqHXDO9Ec +S3wjQRc+eiONp7a7GZO7dOFmoAJyllLlJALeEDdU6ZxGkxLEp3y29tthhvftpqV0 +4mTFwqB7QLlp2k4HwywO9ZlqAEMJZo3jVZz+YRHvVDVQyvMGsYHQt63giJu9Rxbm +eVSV/O72qNjpld1vhxMMDurrFMeZojCEuSWwj8rYx1rVgLloi7nnwrFqrV7dFZvQ +eX9GkRBJAgMBAAECggEABHSh8jH0tdVSUiks6j7JHhcFGh5Z1EHW+3SZ2iMMm0lA +jiOyrkqwu/qvUoR8yV431xjTUnFbV0dWkD9RHtXEZXgBA/+YjZgRn73i6nmRRGSd +FYmxwBG6Jb2V/C6F5aOGb4FdB8AFQ/kR0nBMt2QZdB38Ul020v7LL+lCjszL38HL +qPuZLbvQi4Vs4J8JpO8k2ST3gQhaYWb36XOACaD20mL2xHNpOO5vyBJSnNVb6ueg +jpy1QV/1JOEumYLXFGOudk2QRm/yN2ym4gwpqD3sWIM9iYZsc84K61oibhLRZFtO +luUnuRLrNrzpZfZga2EqEPUEy0IHLij1S9+H2MQTFQKBgQD+A9fwVDnY//PdSDBp ++xlggP2N3RdINi1EStPiLsy//Ok7xSCTXgE09iouZsjaP9r6nSKlG3SO18Hvy4CI +whRzu95Z2vZQLYHuCCwLnqIhpM7xnFL93ueud7ATiE3fGFhJNUMGTYTQ+ZmwFuFQ +7eddWrqVOEqezy2btpnsIVkINwKBgQDgIl4sZ7fl98S64+K0fcB0rCnrciL7OBap +aucHuzmjydaVWW5WkzUOMxh+er2Zeqt1+0cTjnV6J7DJ96d/R8eWkNjTVtULJezf +z91titYbB3O6TwYLx4IzXoweHuC/uLhE27Jxnvgz2IZacK1fKvql1lM5MaP7GDZ8 +VPvmiUFrfwKBgEABs+4JKzJ0/Hwr7pcmALUCi+GtbmpxzGJDALUj2dAe6J55A8Ze +j6tKxEJBACeOo5027z3vdyVvVJ0aCF9tmD25f0PhGuQFM5JJWN/sryoPH15eZ8M0 +4ehinGmvlP+8YLLBywvRiMAnxQRMH6aG7B/n9tAXCSaPSgzMrGiF1qttAoGBAJ51 +Dbk9FpFZ6tbqF7PdF7wkn3padgq/q53Y+z7HCcgXAUMTN+OzLRY933pD0ll4lVHS +9XwJAlr7RoxzLxLYL23uN6yqPfIkvOO6dGRmfFodmZ7FEZQwV4dzt4Hv+JrywCvG +WtDjP7x/vvSfpqKaoxute6b6xmDVzGd4OaLRtNOHAoGAUyockJhGQEkUG9A21DXv +hqR343WeUne1tqwfxkg0DQIBAaaFgGkeL1DjdHhE5ZNz+F/t5LRcvMkZDShRK0u3 +Ytnw2XtSJYtCrPlnDrt1/59dBr7S1nbhStI5xfPojctd0DbVvhC5UfQMKSNHOLCs +tUWwM07FtltvXMoC0xXf5sI= +-----END PRIVATE KEY----- From a3ebcdef0845bbb1639bd735c2f0f28ffbf25a5b Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 17 Sep 2018 09:15:41 -0700 Subject: [PATCH 46/89] 1.13.0 * Update ssl key/cert to pass node 10 (Raymond Feng) * Update` strong-globalize` to v4.1.1 (Runrioter Wung) * Switch to strong-ursa to support Node 10 (Raymond Feng) * Add ability to load in a sync way (DomStorey) * Add the ability to loadSync (DomStorey) * fix code blocks in readme.md with their type (Jiri Spac) * fix: use proper variable names (biniam) --- CHANGES.md | 18 ++++++++++++++++++ package.json | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 6ef5a4c2..85ace7c4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,21 @@ +2018-09-17, Version 1.13.0 +========================== + + * Update ssl key/cert to pass node 10 (Raymond Feng) + + * Update` strong-globalize` to v4.1.1 (Runrioter Wung) + + * Switch to strong-ursa to support Node 10 (Raymond Feng) + + * Add ability to load in a sync way (DomStorey) + + * Add the ability to loadSync (DomStorey) + + * fix code blocks in readme.md with their type (Jiri Spac) + + * fix: use proper variable names (biniam) + + 2018-08-08, Version 1.12.1 ========================== diff --git a/package.json b/package.json index 4c215d7e..aeff76fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.12.1", + "version": "1.13.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From 7eed51dce5f70c59683f93e1c6bd327f1dc63f57 Mon Sep 17 00:00:00 2001 From: Jon Roberts Date: Mon, 24 Sep 2018 14:21:14 +0100 Subject: [PATCH 47/89] Change to isMany logic --- src/parser/xsd/xsdElement.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/parser/xsd/xsdElement.js b/src/parser/xsd/xsdElement.js index 3b28b4b0..b5c98b65 100644 --- a/src/parser/xsd/xsdElement.js +++ b/src/parser/xsd/xsdElement.js @@ -8,7 +8,7 @@ class XSDElement extends Element { constructor(nsName, attrs, options) { super(nsName, attrs, options); } - + describeChildren(definitions, descriptor) { var children = this.children || []; if (children.length === 0) return descriptor; @@ -39,7 +39,7 @@ class XSDElement extends Element { */ isMany() { if (this.$maxOccurs === 'unbounded') return true; - return Number(this.$maxOccurs) > 0; + return Number(this.$maxOccurs) > 1; } } From f089e2a97fb060ed5ba83103ff1398646e6a1f72 Mon Sep 17 00:00:00 2001 From: Jon Roberts Date: Mon, 24 Sep 2018 15:04:35 +0100 Subject: [PATCH 48/89] Add tests to cover maxOccurs --- test/wsdl-test.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/test/wsdl-test.js b/test/wsdl-test.js index 0a8ad787..5c27f8d9 100644 --- a/test/wsdl-test.js +++ b/test/wsdl-test.js @@ -6,7 +6,10 @@ var fs = require('fs'), should = require('should'), request = require('request'), http = require('http'), - async = require('async'); + async = require('async'), + path = require('path'); + +var openWSDL = require('..').WSDL.open; describe('wsdl-tests', function() { @@ -180,6 +183,32 @@ describe('wsdl-tests', function() { done(); }); }); + + it('should map isMany values correctly', function(done) { + openWSDL(path.resolve(__dirname, 'wsdl/marketo.wsdl'), function( + err, + def + ) { + var operation = def.definitions.bindings.MktowsApiSoapBinding.operations.getLeadChanges; + var operationDesc = operation.describe(def); + assert(operationDesc.input.body.elements[0].elements); + + // Check that an element with maxOccurs="1" maps to isMany = false + operationDesc.input.body.elements[0].elements.forEach(function(element){ + if(element.qname.name === 'startPosition'){ + assert.equal(element.isMany, false); + } + + // Check that an element with maxOccurs="unbounded" maps to isMany = false + if(element.qname.name === 'activityNameFilter'){ + assert(element.elements[0]); + assert.equal(element.elements[0].isMany, true); + } + }); + + done(); + }); + }); }); }); From 63de2fc6e7e738aa449590e385dbcfc54b786ffd Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 24 Sep 2018 07:45:26 -0700 Subject: [PATCH 49/89] 1.13.1 * Add tests to cover maxOccurs (Jon Roberts) * Change to isMany logic (Jon Roberts) --- CHANGES.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 85ace7c4..ba45bfb5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,11 @@ +2018-09-24, Version 1.13.1 +========================== + + * Add tests to cover maxOccurs (Jon Roberts) + + * Change to isMany logic (Jon Roberts) + + 2018-09-17, Version 1.13.0 ========================== diff --git a/package.json b/package.json index aeff76fe..7209cc3e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.13.0", + "version": "1.13.1", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From beee60563f3e78aba42ff3976a8745eebbab9a5d Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Fri, 12 Oct 2018 07:04:19 -0700 Subject: [PATCH 50/89] 1.13.2 * changed this.soapActionRequired to boolean (Vineet Jain) * Support of sending soapAction in v1.2 (Vineet Jain) --- CHANGES.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index ba45bfb5..6230673d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,11 @@ +2018-10-12, Version 1.13.2 +========================== + + * changed this.soapActionRequired to boolean (Vineet Jain) + + * Support of sending soapAction in v1.2 (Vineet Jain) + + 2018-09-24, Version 1.13.1 ========================== diff --git a/package.json b/package.json index 7209cc3e..08bbb132 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.13.1", + "version": "1.13.2", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From e39c4c084db10f847a998bb61b9114de941c9fe0 Mon Sep 17 00:00:00 2001 From: Jon Roberts Date: Tue, 16 Oct 2018 17:19:25 +0100 Subject: [PATCH 51/89] Return error via callback --- src/parser/wsdl.js | 8 ++- src/parser/wsdl/binding.js | 70 +++++++++++++----------- src/parser/wsdl/operation.js | 22 +++++--- src/parser/wsdl/service.js | 34 +++++++----- test/doc-lit-part-err-returned.js | 23 ++++++++ test/wsdl/doc-lit-part-error/sample.wsdl | 34 ++++++++++++ test/wsdl/doc-lit-part-error/testni.xsd | 3 + 7 files changed, 135 insertions(+), 59 deletions(-) create mode 100644 test/doc-lit-part-err-returned.js create mode 100644 test/wsdl/doc-lit-part-error/sample.wsdl create mode 100644 test/wsdl/doc-lit-part-error/testni.xsd diff --git a/src/parser/wsdl.js b/src/parser/wsdl.js index d25cd087..44a3334d 100644 --- a/src/parser/wsdl.js +++ b/src/parser/wsdl.js @@ -34,7 +34,7 @@ class WSDL { this.WSDL_CACHE = (options || {}).WSDL_CACHE || {}; this._initializeOptions(options); } - + load(callback) { this._loadAsyncOrSync(false, function (err, wsdl) { callback(err,wsdl); @@ -86,7 +86,11 @@ class WSDL { var services = self.services = self.definitions.services; if (services) { for (let s in services) { - services[s].postProcess(self.definitions); + try { + services[s].postProcess(self.definitions); + } catch (err) { + return callback(err); + } } } diff --git a/src/parser/wsdl/binding.js b/src/parser/wsdl/binding.js index 1e2265fd..cb7014d5 100644 --- a/src/parser/wsdl/binding.js +++ b/src/parser/wsdl/binding.js @@ -20,46 +20,50 @@ class Binding extends WSDLElement { postProcess(definitions) { if (this.operations) return; - this.operations = {}; - var type = QName.parse(this.$type).name, - portType = definitions.portTypes[type], - style = this.style, - children = this.children; - if (portType) { - portType.postProcess(definitions); - this.portType = portType; + try { + this.operations = {}; + var type = QName.parse(this.$type).name, + portType = definitions.portTypes[type], + style = this.style, + children = this.children; + if (portType) { + portType.postProcess(definitions); + this.portType = portType; - for (var i = 0, child; child = children[i]; i++) { - if (child.name !== 'operation') - continue; - var operation = this.portType.operations[child.$name]; - if (operation) { - this.operations[child.$name] = child; - child.operation = operation; + for (var i = 0, child; child = children[i]; i++) { + if (child.name !== 'operation') + continue; + var operation = this.portType.operations[child.$name]; + if (operation) { + this.operations[child.$name] = child; + child.operation = operation; - // Set portType.operation.input.message to binding.operation.input - if (operation.input && child.input) { - child.input.message = operation.input.message; - } - // Set portType.operation.output.message to binding.operation.output - if (operation.output && child.output) { - child.output.message = operation.output.message; - } + // Set portType.operation.input.message to binding.operation.input + if (operation.input && child.input) { + child.input.message = operation.input.message; + } + // Set portType.operation.output.message to binding.operation.output + if (operation.output && child.output) { + child.output.message = operation.output.message; + } - //portType.operation.fault is fully processed with message etc. Hence set to binding.operation.fault - for (var f in operation.faults) { - if (operation.faults[f]) { - child.faults[f] = operation.faults[f]; + //portType.operation.fault is fully processed with message etc. Hence set to binding.operation.fault + for (var f in operation.faults) { + if (operation.faults[f]) { + child.faults[f] = operation.faults[f]; + } } + if (operation.$parameterOrder) { + // For RPC style + child.parameterOrder = operation.$parameterOrder.split(/\s+/); + } + child.style = child.style || style; + child.postProcess(definitions); } - if (operation.$parameterOrder) { - // For RPC style - child.parameterOrder = operation.$parameterOrder.split(/\s+/); - } - child.style = child.style || style; - child.postProcess(definitions); } } + } catch (err) { + throw err; } } diff --git a/src/parser/wsdl/operation.js b/src/parser/wsdl/operation.js index d6b7f5bc..3d435b03 100644 --- a/src/parser/wsdl/operation.js +++ b/src/parser/wsdl/operation.js @@ -56,16 +56,20 @@ class Operation extends WSDLElement { } postProcess(definitions) { - if (this._processed) return; // Already processed - if (this.input) this.input.postProcess(definitions); - if (this.output) this.output.postProcess(definitions); - for (let i = 0, n = this.faults.length; i < n; i++) { - this.faults[i].postProcess(definitions); - } - if (this.parent.name === 'binding') { - this.getMode(); + try { + if (this._processed) return; // Already processed + if (this.input) this.input.postProcess(definitions); + if (this.output) this.output.postProcess(definitions); + for (let i = 0, n = this.faults.length; i < n; i++) { + this.faults[i].postProcess(definitions); + } + if (this.parent.name === 'binding') { + this.getMode(); + } + this._processed = true; + } catch (err) { + throw err; } - this._processed = true; } static describeHeaders(param, definitions) { diff --git a/src/parser/wsdl/service.js b/src/parser/wsdl/service.js index 0abe558f..70e0bea3 100644 --- a/src/parser/wsdl/service.js +++ b/src/parser/wsdl/service.js @@ -10,23 +10,27 @@ class Service extends WSDLElement { } postProcess(definitions) { - var children = this.children, - bindings = definitions.bindings; - if (children && children.length > 0) { - for (var i = 0, child; child = children[i]; i++) { - if (child.name !== 'port') - continue; - var bindingName = QName.parse(child.$binding).name; - var binding = bindings[bindingName]; - if (binding) { - binding.postProcess(definitions); - this.ports[child.$name] = { - location: child.location, - binding: binding - }; - children.splice(i--, 1); + try { + var children = this.children, + bindings = definitions.bindings; + if (children && children.length > 0) { + for (var i = 0, child; child = children[i]; i++) { + if (child.name !== 'port') + continue; + var bindingName = QName.parse(child.$binding).name; + var binding = bindings[bindingName]; + if (binding) { + binding.postProcess(definitions); + this.ports[child.$name] = { + location: child.location, + binding: binding + }; + children.splice(i--, 1); + } } } + } catch (err) { + throw err; } } diff --git a/test/doc-lit-part-err-returned.js b/test/doc-lit-part-err-returned.js new file mode 100644 index 00000000..4221e37c --- /dev/null +++ b/test/doc-lit-part-err-returned.js @@ -0,0 +1,23 @@ +"use strict"; + +var fs = require('fs'), + soap = require('..').soap, + WSDL = soap.WSDL, + assert = require('assert'), + path = require('path'); + +describe('doc-lit-part-err-returned-tests', function() { + + it('Loading wsdl should return an error via the callback', function (done) { + WSDL.open(path.resolve(__dirname, 'wsdl/doc-lit-part-error/sample.wsdl'),function (err) { + if(err){ + // check error thrown + assert.equal(err.message, 'Document/literal part should use element'); + done(); + } else { + done('Expepected "Document/literal part should use element" error to be thrown'); + } + }); + }); +}); + diff --git a/test/wsdl/doc-lit-part-error/sample.wsdl b/test/wsdl/doc-lit-part-error/sample.wsdl new file mode 100644 index 00000000..fd55689d --- /dev/null +++ b/test/wsdl/doc-lit-part-error/sample.wsdl @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/doc-lit-part-error/testni.xsd b/test/wsdl/doc-lit-part-error/testni.xsd new file mode 100644 index 00000000..f4fcee5e --- /dev/null +++ b/test/wsdl/doc-lit-part-error/testni.xsd @@ -0,0 +1,3 @@ + + From 1f687cce923f50430ea543ebb66680bc0103ca82 Mon Sep 17 00:00:00 2001 From: Jon Roberts Date: Wed, 17 Oct 2018 13:24:15 +0100 Subject: [PATCH 52/89] Rename test so it gets run --- ...lit-part-err-returned.js => doc-lit-part-err-returned-test.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{doc-lit-part-err-returned.js => doc-lit-part-err-returned-test.js} (100%) diff --git a/test/doc-lit-part-err-returned.js b/test/doc-lit-part-err-returned-test.js similarity index 100% rename from test/doc-lit-part-err-returned.js rename to test/doc-lit-part-err-returned-test.js From 1e38ff9249378a1d54817728bf53b4350556d271 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 18 Oct 2018 14:17:49 -0700 Subject: [PATCH 53/89] Update CODEOWNERS --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index f4e974e5..17ecc54d 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -3,4 +3,4 @@ # the last matching pattern has the most precendence. # Core team members from IBM -* @rashmihunt @raymondfeng +* @b-admike @raymondfeng From 4450b13e2b5c01e5f6d944a078546e3e045670c9 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 18 Oct 2018 14:19:23 -0700 Subject: [PATCH 54/89] 1.14.0 * Update CODEOWNERS (Raymond Feng) * Rename test so it gets run (Jon Roberts) * Return error via callback (Jon Roberts) --- CHANGES.md | 10 ++++++++++ package.json | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 6230673d..93741312 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,13 @@ +2018-10-18, Version 1.14.0 +========================== + + * Update CODEOWNERS (Raymond Feng) + + * Rename test so it gets run (Jon Roberts) + + * Return error via callback (Jon Roberts) + + 2018-10-12, Version 1.13.2 ========================== diff --git a/package.json b/package.json index 08bbb132..718c79a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.13.2", + "version": "1.14.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From 30ec15ef2733e2c3aad9063a99d0816e85dda870 Mon Sep 17 00:00:00 2001 From: Romeu Palos de Gouvea Date: Tue, 22 Jan 2019 11:10:13 -0200 Subject: [PATCH 55/89] Adding enforce restrictions option Support to enforce the following XML restrictions: - enumeration - fractionDigits - length - maxExclusive - maxInclusive - maxLength - minExclusive - minInclusive - minLength - pattern - totalDigits - whiteSpace --- intl/en/messages.json | 2 +- intl/zz/messages.json | 813 +++++++++++++++++ intl/zz/messages_inverted.json | 1387 ++++++++++++++++++++++++++++++ src/client.js | 2 +- src/parser/xmlHandler.js | 46 +- src/parser/xsd/restriction.js | 120 +++ test/client-restrictions-test.js | 356 ++++++++ test/wsdl/restriction_types.xsd | 102 +++ test/wsdl/restrictions.wsdl | 47 + 9 files changed, 2857 insertions(+), 18 deletions(-) create mode 100644 intl/zz/messages.json create mode 100644 intl/zz/messages_inverted.json create mode 100644 test/client-restrictions-test.js create mode 100644 test/wsdl/restriction_types.xsd create mode 100644 test/wsdl/restrictions.wsdl diff --git a/intl/en/messages.json b/intl/en/messages.json index 96146e7a..12b502ce 100644 --- a/intl/en/messages.json +++ b/intl/en/messages.json @@ -2,7 +2,6 @@ "1b12432ead1b2b9902c4b9801aa0317b": "supplied {{pfx}} file should be a {{buffer}} or a file location", "1f2c65133b5bb463e7d1fceda5b31156": "The key element {0} {1} MUST contain one and only one selector element", "28c828192eb440b64b8efd7f08cc37b3": "Attribute {{itemType}} is not allowed if the content contains a {{simpleType}} element", - "2d6dbd73e7a3abc468b95ca530caca9b": "Target namespace \"{0}\" already in use by another Schema", "37e4bf66d90c313e7adb3317345be046": "{{WSDL}} style not supported: {0}", "39e07c5a6797c4923d6a924999b62f8c": "Invalid qname: {0}", "46ad858fdf2e460aa3b626d6455362f2": "The key element {0} {1} MUST contain one or more field elements", @@ -13,6 +12,7 @@ "738cd872b93488bfd87f26224d09e26d": "Cannot parse response", "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} should be a {{buffer}} or a {{string}}!", "97ed6b53b9b594fb90c6bfb2e0ba0286": "List must have an item type", + "ad16b1c54d1a687cb4efc849e918816c": "The field {0} cannot have value {1} due to the violations: {2}", "bcb4356ee2e7a196b9671acf3989741d": "Invalid username or password", "d40b6f905bf039c4d627ecafb7fdcac5": "No security header", "d7bda8e2c3faafdf0988f8cb4719a01d": "List can only contain one {{simpleType}} element", diff --git a/intl/zz/messages.json b/intl/zz/messages.json new file mode 100644 index 00000000..e429a48b --- /dev/null +++ b/intl/zz/messages.json @@ -0,0 +1,813 @@ +{ + "soap": [ + "XMLHandler.createSOAPEnvelopeDescriptor:example/json2xml.js:29", + "XMLHandler.createSOAPEnvelopeDescriptor:example/weather.js:52" + ], + "Response envelope:": [ + "console.log:example/ntlm.js:48", + "console.log:example/weather.js:37" + ], + "Response Envelope: \n": [ + "console.log:example/stockquote.js:16" + ], + "Result: \n": [ + "console.log:example/stockquote.js:18" + ], + "Invoking operation: ": [ + "console.log:example/weather.js:33" + ], + "Result:": [ + "console.log:example/weather.js:43" + ], + "jsonToXml:": [ + "console.log:example/weather.js:55" + ], + "parseXml:": [ + "console.log:example/weather.js:67" + ], + "%s": [ + "console.log:example/xml2json.js:36" + ], + ":Body": [ + "doc.element:lib/base.js:71", + "doc.element:lib/parser/xmlHandler.js:379", + "doc.element:src/base.js:73", + "doc.element:src/parser/xmlHandler.js:375" + ], + ":Envelope": [ + "xmlBuilder.create:lib/base.js:68", + "xmlBuilder.create:lib/parser/xmlHandler.js:375", + "xmlBuilder.create:src/base.js:69", + "xmlBuilder.create:src/parser/xmlHandler.js:369" + ], + ":Header": [ + "doc.element:lib/base.js:70", + "doc.element:lib/parser/xmlHandler.js:378", + "doc.element:src/base.js:72", + "doc.element:src/parser/xmlHandler.js:374" + ], + "http://schemas.xmlsoap.org/": [ + "nsURI.indexOf:lib/base.js:103", + "ns.indexOf:lib/parser/wsdl.js:358", + "nsURI.indexOf:src/base.js:105", + "ns.indexOf:src/parser/wsdl.js:377" + ], + "http://www.w3.org/": [ + "nsURI.indexOf:lib/base.js:104", + "ns.indexOf:lib/parser/wsdl.js:359", + "nsURI.indexOf:src/base.js:107", + "ns.indexOf:src/parser/wsdl.js:379" + ], + "http://xml.apache.org/": [ + "nsURI.indexOf:lib/base.js:105", + "ns.indexOf:lib/parser/wsdl.js:360", + "nsURI.indexOf:src/base.js:109", + "ns.indexOf:src/parser/wsdl.js:381" + ], + "xmlns:": [ + "doc.attribute:lib/base.js:69", + "doc.attribute:lib/parser/xmlHandler.js:377", + "node.attribute:lib/parser/xmlHandler.js:802", + "doc.attribute:src/base.js:71", + "doc.attribute:src/parser/xmlHandler.js:372", + "node.attribute:src/parser/xmlHandler.js:815" + ], + "738cd872b93488bfd87f26224d09e26d": [ + "g.f:lib/client.js:302", + "g.f:src/client.js:310" + ], + "": [ + "body.indexOf:lib/client.js:269", + "body.indexOf:src/client.js:277" + ], + "": [ + "body.indexOf:lib/client.js:269", + "body.indexOf:src/client.js:277" + ], + "Request envelope: %s": [ + "debug:lib/client.js:235", + "debug:src/client.js:242" + ], + "client request, calling jsonToXml. args: %j": [ + "debug:lib/client.js:218", + "debug:src/client.js:225" + ], + "client request. headers: %j": [ + "debug:lib/client.js:158", + "debug:src/client.js:161" + ], + "client request. inputBodyDescriptor: %j": [ + "debug:lib/client.js:214", + "debug:src/client.js:220" + ], + "client request. operation: %s args: %j options: %j extraHeaders: %j": [ + "debug:lib/client.js:119", + "debug:src/client.js:122" + ], + "client request. operationDescriptor: %j": [ + "debugDetail:lib/client.js:211", + "debugDetail:src/client.js:217" + ], + "client request. options: %j": [ + "debugSensitive:lib/client.js:148", + "debugSensitive:lib/client.js:170", + "debugSensitive:lib/client.js:174", + "debugSensitive:src/client.js:151", + "debugSensitive:src/client.js:173", + "debugSensitive:src/client.js:177" + ], + "client request. soapAction: %s": [ + "debug:lib/client.js:145", + "debug:src/client.js:148" + ], + "client request. soapNsURI: %s soapNsPrefix: %s ": [ + "debug:lib/client.js:131", + "debug:src/client.js:134" + ], + "client response. error message: %s": [ + "debug:lib/client.js:280", + "debug:src/client.js:288" + ], + "client response. lastRequestHeaders: %j": [ + "debug:lib/client.js:338", + "debug:src/client.js:347" + ], + "client response. output not present": [ + "debug:lib/client.js:283", + "debug:src/client.js:291" + ], + "client response. outputEnvDescriptor: %j": [ + "debugDetail:lib/client.js:275", + "debugDetail:src/client.js:283" + ], + "client response. response: %j body: %j": [ + "debug:lib/client.js:260", + "debug:src/client.js:268" + ], + "client response. result: %j body: %j obj.Header: %j": [ + "debug:lib/client.js:328", + "debug:src/client.js:337" + ], + "message": [ + "self.emit:lib/client.js:241", + "self.emit:src/client.js:248" + ], + "request": [ + "self.emit:lib/client.js:242", + "server.listeners:lib/server.js:34", + "server.removeAllListeners:lib/server.js:36", + "server.addListener:lib/server.js:37", + "self.emit:lib/server.js:189", + "self.emit:lib/server.js:225", + "self.emit:src/client.js:249", + "server.listeners:src/server.js:35", + "server.removeAllListeners:src/server.js:37", + "server.addListener:src/server.js:38", + "self.emit:src/server.js:192", + "self.emit:src/server.js:229" + ], + "response": [ + "self.emit:lib/client.js:258", + "self.emit:src/client.js:266" + ], + "soapError": [ + "self.emit:lib/client.js:293", + "self.emit:src/client.js:301" + ], + "Http request: %j": [ + "debug:lib/http.js:80", + "debug:src/http.js:81" + ], + "Http response body: %j": [ + "debug:lib/http.js:92", + "debug:src/http.js:93" + ], + "NTLM options: %j for method: %s": [ + "debugSensitive:lib/http.js:145", + "debugSensitive:src/http.js:147" + ], + "httpntlm method: %s": [ + "debug:lib/http.js:146", + "debug:src/http.js:148" + ], + "61b096fd390a169fc86698a3fe30387f": [ + "g.f:lib/parser/element.js:126", + "g.f:src/parser/element.js:131" + ], + "Element %s is not allowed within %j": [ + "debug:lib/parser/element.js:82", + "debug:src/parser/element.js:86" + ], + "Element created: ": [ + "debug:lib/parser/element.js:89", + "debug:src/parser/element.js:93" + ], + "Schema %s not found: %s %s": [ + "debug:lib/parser/element.js:219", + "debug:src/parser/element.js:226" + ], + "Schema not found: %s (%s)": [ + "debug:lib/parser/element.js:191", + "debug:src/parser/element.js:198" + ], + "Unknown element: %s %s": [ + "debug:lib/parser/element.js:226", + "debug:src/parser/element.js:233" + ], + "any": [ + "indexOf:lib/parser/element.js:81", + "indexOf:src/parser/element.js:85" + ], + "base64": [ + "pwHash.digest:lib/parser/helper.js:98", + "nHash.digest:lib/security/WSSecurity.js:79", + "pwHash.digest:lib/utils.js:9", + "pwHash.digest:lib/utils.js:17", + "pwHash.digest:src/parser/helper.js:102", + "nHash.digest:src/security/WSSecurity.js:91", + "pwHash.digest:src/utils.js:9", + "pwHash.digest:src/utils.js:21" + ], + "sha1": [ + "crypto.createHash:lib/parser/helper.js:95", + "crypto.createHash:lib/security/WSSecurity.js:77", + "crypto.createHash:lib/utils.js:6", + "crypto.createHash:lib/utils.js:14", + "crypto.createHash:src/parser/helper.js:99", + "crypto.createHash:src/security/WSSecurity.js:89", + "crypto.createHash:src/utils.js:6", + "crypto.createHash:src/utils.js:14" + ], + "39e07c5a6797c4923d6a924999b62f8c": [ + "g.f:lib/parser/qname.js:27", + "g.f:src/parser/qname.js:28" + ], + "xs:schema": [ + "Schema:lib/parser/wsdl/definitions.js:32", + "Schema:src/parser/wsdl/definitions.js:34" + ], + "37e4bf66d90c313e7adb3317345be046": [ + "g.f:lib/parser/wsdl/operation.js:199", + "g.f:src/parser/wsdl/operation.js:207" + ], + "da96ad47da6be6a613f921b260a33ce0": [ + "g.warn:lib/parser/wsdl/operation.js:85", + "g.warn:lib/parser/wsdl/operation.js:99", + "g.warn:src/parser/wsdl/operation.js:84", + "g.warn:src/parser/wsdl/operation.js:100" + ], + "Document/literal part should use element": [ + "console.error:lib/parser/wsdl/operation.js:330", + "Error:lib/parser/wsdl/operation.js:331", + "console.error:src/parser/wsdl/operation.js:355", + "Error:src/parser/wsdl/operation.js:356" + ], + "Message not found: ": [ + "debug:lib/parser/wsdl/parameter.js:68", + "debug:lib/parser/wsdl/parameter.js:90", + "debug:src/parser/wsdl/parameter.js:68", + "debug:src/parser/wsdl/parameter.js:90" + ], + "Unable to resolve message ": [ + "Error:lib/parser/wsdl/parameter.js:37", + "Error:src/parser/wsdl/parameter.js:37" + ], + "Unable to resolve message %s for": [ + "console.error:lib/parser/wsdl/parameter.js:36", + "console.error:src/parser/wsdl/parameter.js:36" + ], + "49569f279dd1e347fd90d448fdafbb93": [ + "g.f:lib/parser/wsdl.js:308", + "g.f:src/parser/wsdl.js:326" + ], + "fab749587c48e724a661d77a44084214": [ + "g.f:lib/parser/wsdl.js:452", + "g.f:src/parser/wsdl.js:478" + ], + "End element: %s": [ + "debug:lib/parser/wsdl.js:314", + "debug:src/parser/wsdl.js:332" + ], + "Processing: ": [ + "debugInclude:lib/parser/wsdl.js:188", + "debugInclude:src/parser/wsdl.js:201" + ], + "Reading file: %s": [ + "debug:lib/parser/wsdl.js:429", + "debug:src/parser/wsdl.js:453" + ], + "Start element: %j": [ + "debug:lib/parser/wsdl.js:275", + "debug:src/parser/wsdl.js:293" + ], + "WSDL error: %s ": [ + "debug:lib/parser/wsdl.js:286", + "debug:src/parser/wsdl.js:304" + ], + "WSDL xml: %s": [ + "debug:lib/parser/wsdl.js:329", + "debug:src/parser/wsdl.js:347" + ], + "definitions": [ + "Definitions:lib/parser/wsdl.js:301", + "Definitions:src/parser/wsdl.js:319" + ], + "includes/imports: ": [ + "debugInclude:lib/parser/wsdl.js:169", + "debugInclude:src/parser/wsdl.js:181" + ], + "types": [ + "Types:lib/parser/wsdl.js:302", + "Types:src/parser/wsdl.js:320" + ], + "wsdl open. request_headers: %j request_options: %j": [ + "debug:lib/parser/wsdl.js:419", + "debug:lib/parser/wsdl.js:493", + "debug:src/parser/wsdl.js:442", + "debug:src/parser/wsdl.js:521" + ], + "": [ + "val.replace:lib/parser/xmlHandler.js:104", + "val.replace:src/parser/xmlHandler.js:108" + ], + "detail": [ + "selectn:lib/parser/xmlHandler.js:742", + "selectn:src/parser/xmlHandler.js:751" + ], + "detail.$value": [ + "selectn:lib/parser/xmlHandler.js:742", + "selectn:src/parser/xmlHandler.js:750" + ], + "faultactor": [ + "selectn:lib/parser/xmlHandler.js:738", + "selectn:src/parser/xmlHandler.js:746" + ], + "faultactor.$value": [ + "selectn:lib/parser/xmlHandler.js:738", + "selectn:src/parser/xmlHandler.js:745" + ], + "faultcode": [ + "selectn:lib/parser/xmlHandler.js:726", + "selectn:src/parser/xmlHandler.js:733" + ], + "faultcode.$value": [ + "selectn:lib/parser/xmlHandler.js:726", + "selectn:src/parser/xmlHandler.js:732" + ], + "faultstring": [ + "selectn:lib/parser/xmlHandler.js:734", + "selectn:src/parser/xmlHandler.js:741" + ], + "faultstring.$value": [ + "selectn:lib/parser/xmlHandler.js:734", + "selectn:src/parser/xmlHandler.js:740" + ], + "reason.$value": [ + "selectn:lib/parser/xmlHandler.js:771", + "selectn:src/parser/xmlHandler.js:781" + ], + "xsi:nil": [ + "element.attribute:lib/parser/xmlHandler.js:135", + "element.attribute:src/parser/xmlHandler.js:140" + ], + "xsi:type": [ + "node.attribute:lib/parser/xmlHandler.js:359", + "node.attribute:src/parser/xmlHandler.js:350" + ], + "1f2c65133b5bb463e7d1fceda5b31156": [ + "g.warn:lib/parser/xsd/keybase.js:16", + "g.warn:lib/parser/xsd/keybase.js:26", + "g.warn:src/parser/xsd/keybase.js:16", + "g.warn:src/parser/xsd/keybase.js:28" + ], + "46ad858fdf2e460aa3b626d6455362f2": [ + "g.warn:lib/parser/xsd/keybase.js:29", + "g.warn:src/parser/xsd/keybase.js:33" + ], + "28c828192eb440b64b8efd7f08cc37b3": [ + "g.warn:lib/parser/xsd/list.js:26", + "g.warn:src/parser/xsd/list.js:27" + ], + "97ed6b53b9b594fb90c6bfb2e0ba0286": [ + "g.warn:lib/parser/xsd/list.js:34", + "g.warn:src/parser/xsd/list.js:36" + ], + "d7bda8e2c3faafdf0988f8cb4719a01d": [ + "g.warn:lib/parser/xsd/list.js:28", + "g.warn:src/parser/xsd/list.js:30" + ], + "ad16b1c54d1a687cb4efc849e918816c": [ + "g.f:lib/parser/xsd/restriction.js:193", + "g.f:src/parser/xsd/restriction.js:195" + ], + " != ": [ + "violations.push:lib/parser/xsd/restriction.js:158", + "violations.push:src/parser/xsd/restriction.js:160" + ], + " !match ": [ + "violations.push:lib/parser/xsd/restriction.js:182", + "violations.push:src/parser/xsd/restriction.js:184" + ], + " < ": [ + "violations.push:lib/parser/xsd/restriction.js:113", + "violations.push:lib/parser/xsd/restriction.js:170", + "violations.push:src/parser/xsd/restriction.js:115", + "violations.push:src/parser/xsd/restriction.js:172" + ], + " <= ": [ + "violations.push:lib/parser/xsd/restriction.js:107", + "violations.push:src/parser/xsd/restriction.js:109" + ], + " > ": [ + "violations.push:lib/parser/xsd/restriction.js:125", + "violations.push:lib/parser/xsd/restriction.js:133", + "violations.push:lib/parser/xsd/restriction.js:144", + "violations.push:lib/parser/xsd/restriction.js:149", + "violations.push:lib/parser/xsd/restriction.js:164", + "violations.push:src/parser/xsd/restriction.js:127", + "violations.push:src/parser/xsd/restriction.js:135", + "violations.push:src/parser/xsd/restriction.js:146", + "violations.push:src/parser/xsd/restriction.js:151", + "violations.push:src/parser/xsd/restriction.js:166" + ], + " >= ": [ + "violations.push:lib/parser/xsd/restriction.js:119", + "violations.push:src/parser/xsd/restriction.js:121" + ], + " is not in ": [ + "violations.push:lib/parser/xsd/restriction.js:188", + "violations.push:src/parser/xsd/restriction.js:190" + ], + "length is bigger than maxLength (": [ + "violations.push:lib/parser/xsd/restriction.js:164", + "violations.push:src/parser/xsd/restriction.js:166" + ], + "length is smaller than minLength (": [ + "violations.push:lib/parser/xsd/restriction.js:170", + "violations.push:src/parser/xsd/restriction.js:172" + ], + "lengths don't match (": [ + "violations.push:lib/parser/xsd/restriction.js:158", + "violations.push:src/parser/xsd/restriction.js:160" + ], + "value doesn't match the required pattern (": [ + "violations.push:lib/parser/xsd/restriction.js:182", + "violations.push:src/parser/xsd/restriction.js:184" + ], + "value has more decimal places than allowed (": [ + "violations.push:lib/parser/xsd/restriction.js:133", + "violations.push:src/parser/xsd/restriction.js:135" + ], + "value has more digits than allowed (": [ + "violations.push:lib/parser/xsd/restriction.js:144", + "violations.push:src/parser/xsd/restriction.js:146" + ], + "value has more integer digits than allowed (": [ + "violations.push:lib/parser/xsd/restriction.js:149", + "violations.push:src/parser/xsd/restriction.js:151" + ], + "value is greater or equal than maxExclusive (": [ + "violations.push:lib/parser/xsd/restriction.js:119", + "violations.push:src/parser/xsd/restriction.js:121" + ], + "value is greater than maxInclusive (": [ + "violations.push:lib/parser/xsd/restriction.js:125", + "violations.push:src/parser/xsd/restriction.js:127" + ], + "value is less or equal than minExclusive (": [ + "violations.push:lib/parser/xsd/restriction.js:107", + "violations.push:src/parser/xsd/restriction.js:109" + ], + "value is less than minInclusive (": [ + "violations.push:lib/parser/xsd/restriction.js:113", + "violations.push:src/parser/xsd/restriction.js:115" + ], + "value is not in the list of valid values (": [ + "violations.push:lib/parser/xsd/restriction.js:188", + "violations.push:src/parser/xsd/restriction.js:190" + ], + "xsd:simpleType": [ + "SimpleType:lib/parser/xsd.js:11", + "SimpleType:src/parser/xsd.js:11" + ], + "6623e372e766ea11d932836035404a2b": [ + "g.f:lib/security/ClientSSLSecurity.js:29", + "g.f:src/security/ClientSSLSecurity.js:29" + ], + "7f7cb47259df769f2d3b3f7133f1a1ea": [ + "g.f:lib/security/ClientSSLSecurity.js:39", + "g.f:src/security/ClientSSLSecurity.js:39" + ], + "1b12432ead1b2b9902c4b9801aa0317b": [ + "g.f:lib/security/ClientSSLSecurityPFX.js:31", + "g.f:src/security/ClientSSLSecurityPFX.js:31" + ], + "set-cookie": [ + "cookie.hasOwnProperty:lib/security/CookieSecurity.js:6", + "cookie.hasOwnProperty:src/security/CookieSecurity.js:6" + ], + "EncodingType": [ + "userNameElement.attribute:lib/security/WSSecurity.js:87", + "userNameElement.attribute:lib/security/WSSecurity.js:92", + "secElement.attribute:lib/security/WSSecurityCert.js:76", + "userNameElement.attribute:src/security/WSSecurity.js:103", + "userNameElement.attribute:src/security/WSSecurity.js:114", + "secElement.attribute:src/security/WSSecurityCert.js:92" + ], + "Type": [ + "userNameElement.attribute:lib/security/WSSecurity.js:84", + "userNameElement.attribute:lib/security/WSSecurity.js:90", + "userNameElement.attribute:src/security/WSSecurity.js:97", + "userNameElement.attribute:src/security/WSSecurity.js:109" + ], + "soap:actor": [ + "secElement.attribute:lib/security/WSSecurity.js:48", + "secElement.attribute:src/security/WSSecurity.js:54" + ], + "soap:mustUnderstand": [ + "secElement.attribute:lib/security/WSSecurity.js:51", + "headerElement.attribute:lib/server.js:328", + "secElement.attribute:src/security/WSSecurity.js:57", + "headerElement.attribute:src/server.js:340" + ], + "wsse:Nonce": [ + "userNameElement.element:lib/security/WSSecurity.js:87", + "userNameElement.element:lib/security/WSSecurity.js:92", + "userNameElement.element:src/security/WSSecurity.js:102", + "userNameElement.element:src/security/WSSecurity.js:113" + ], + "wsse:Password": [ + "userNameElement.element:lib/security/WSSecurity.js:84", + "userNameElement.element:lib/security/WSSecurity.js:90", + "userNameElement.element:src/security/WSSecurity.js:96", + "userNameElement.element:src/security/WSSecurity.js:108" + ], + "wsse:Security": [ + "headerElement.element:lib/security/WSSecurity.js:46", + "headerElement.element:lib/security/WSSecurityCert.js:75", + "headerElement.element:lib/server.js:328", + "headerElement.element:src/security/WSSecurity.js:52", + "headerElement.element:src/security/WSSecurityCert.js:85", + "headerElement.element:src/server.js:339" + ], + "wsse:Username": [ + "userNameElement.element:lib/security/WSSecurity.js:69", + "userNameElement.element:src/security/WSSecurity.js:81" + ], + "wsse:UsernameToken": [ + "secElement.element:lib/security/WSSecurity.js:67", + "secElement.element:src/security/WSSecurity.js:78" + ], + "wsu:Created": [ + "tsElement.element:lib/security/WSSecurity.js:63", + "userNameElement.element:lib/security/WSSecurity.js:71", + "tsElement.element:lib/security/WSSecurityCert.js:78", + "tsElement.element:lib/server.js:339", + "tsElement.element:src/security/WSSecurity.js:74", + "userNameElement.element:src/security/WSSecurity.js:83", + "tsElement.element:src/security/WSSecurityCert.js:100", + "tsElement.element:src/server.js:356" + ], + "wsu:Expires": [ + "tsElement.element:lib/security/WSSecurity.js:64", + "tsElement.element:lib/security/WSSecurityCert.js:79", + "tsElement.element:lib/server.js:340", + "tsElement.element:src/security/WSSecurity.js:75", + "tsElement.element:src/security/WSSecurityCert.js:101", + "tsElement.element:src/server.js:357" + ], + "wsu:Id": [ + "secElement.attribute:lib/security/WSSecurity.js:62", + "secElement.attribute:lib/security/WSSecurity.js:67", + "secElement.attribute:lib/security/WSSecurityCert.js:77", + "secElement.attribute:lib/server.js:338", + "secElement.attribute:src/security/WSSecurity.js:73", + "secElement.attribute:src/security/WSSecurity.js:79", + "secElement.attribute:src/security/WSSecurityCert.js:99", + "secElement.attribute:src/server.js:355" + ], + "wsu:Timestamp": [ + "secElement.element:lib/security/WSSecurity.js:62", + "secElement.element:lib/security/WSSecurityCert.js:77", + "secElement.element:lib/server.js:338", + "secElement.element:src/security/WSSecurity.js:72", + "secElement.element:src/security/WSSecurityCert.js:98", + "secElement.element:src/server.js:354" + ], + "xmlns:wsse": [ + "secElement.attribute:lib/security/WSSecurity.js:54", + "headerElement.attribute:lib/security/WSSecurityCert.js:75", + "secElement.attribute:lib/server.js:330", + "secElement.attribute:src/security/WSSecurity.js:61", + "headerElement.attribute:src/security/WSSecurityCert.js:86", + "secElement.attribute:src/server.js:343" + ], + "xmlns:wsu": [ + "secElement.attribute:lib/security/WSSecurity.js:54", + "secElement.attribute:lib/server.js:330", + "secElement.attribute:src/security/WSSecurity.js:63", + "secElement.attribute:src/server.js:345" + ], + "552f3502256707b8c5b12ddb64e3f74e": [ + "g.f:lib/security/WSSecurityCert.js:41", + "g.f:src/security/WSSecurityCert.js:46" + ], + "-----BEGIN CERTIFICATE-----": [ + "publicP12PEM.replace:lib/security/WSSecurityCert.js:44", + "publicP12PEM.replace:src/security/WSSecurityCert.js:50" + ], + "//*[local-name(.)='Body']": [ + "addReference:lib/security/WSSecurityCert.js:52", + "addReference:src/security/WSSecurityCert.js:61" + ], + "//*[local-name(.)='Timestamp']": [ + "addReference:lib/security/WSSecurityCert.js:53", + "addReference:src/security/WSSecurityCert.js:62" + ], + "strong-ursa": [ + "optional:lib/security/WSSecurityCert.js:5", + "optional:src/security/WSSecurityCert.js:5" + ], + "wsse:BinarySecurityToken": [ + "secElement.element:lib/security/WSSecurityCert.js:76", + "secElement.element:src/security/WSSecurityCert.js:91" + ], + "bcb4356ee2e7a196b9671acf3989741d": [ + "g.f:lib/server.js:144", + "g.f:src/server.js:146" + ], + "d40b6f905bf039c4d627ecafb7fdcac5": [ + "g.f:lib/server.js:141", + "g.f:src/server.js:143" + ], + "e158dd1d250f1cc3df497728da556be1": [ + "g.f:lib/server.js:182", + "g.f:src/server.js:185" + ], + "Content-Type": [ + "res.setHeader:lib/server.js:72", + "res.setHeader:lib/server.js:77", + "res.setHeader:src/server.js:74", + "res.setHeader:src/server.js:79" + ], + "Server executeMethod: error: %s ": [ + "debug:lib/server.js:266", + "debug:src/server.js:270" + ], + "Server handleResult. operationDescriptor: %j ": [ + "debugDetail:lib/server.js:288", + "debugDetail:src/server.js:296" + ], + "Server handleResult. outputBodyDescriptor: %j ": [ + "debugDetail:lib/server.js:291", + "debugDetail:src/server.js:299" + ], + "Server handleResult. xml: %s ": [ + "debug:lib/server.js:311", + "debug:src/server.js:320" + ], + "Server operation: %s ": [ + "debug:lib/server.js:264", + "debug:src/server.js:268" + ], + "Server parameters: path: %s services: %j wsdl: %j": [ + "debug:lib/server.js:29", + "debug:src/server.js:29" + ], + "Server sendError. error.Fault: %j ": [ + "debug:lib/server.js:389", + "debug:src/server.js:409" + ], + "Server sendError. Response envelope: %s ": [ + "debug:lib/server.js:398", + "debug:src/server.js:418" + ], + "Server sendError. faultDescriptor: %j ": [ + "debugDetail:lib/server.js:387", + "debugDetail:src/server.js:407" + ], + "Server sendError. operationDescriptor: %j ": [ + "debugDetail:lib/server.js:367", + "debugDetail:src/server.js:385" + ], + "Server soapNsURI: %s soapNsPrefix: %s": [ + "debug:lib/server.js:300", + "debug:src/server.js:308" + ], + "data": [ + "req.on:lib/server.js:84", + "req.on:src/server.js:85" + ], + "end": [ + "req.on:lib/server.js:88", + "req.on:src/server.js:90" + ], + "error": [ + "self.log:lib/server.js:116", + "self.log:src/server.js:119" + ], + "headers": [ + "self.emit:lib/server.js:190", + "self.emit:lib/server.js:226", + "self.emit:src/server.js:194", + "self.emit:src/server.js:231" + ], + "info": [ + "self.log:lib/server.js:64", + "self.log:lib/server.js:70", + "self.log:lib/server.js:149", + "self.log:lib/server.js:167", + "self.log:src/server.js:66", + "self.log:src/server.js:72", + "self.log:src/server.js:151", + "self.log:src/server.js:169" + ], + "received": [ + "self.log:lib/server.js:98", + "self.log:src/server.js:100" + ], + "replied": [ + "self.log:lib/server.js:107", + "self.log:src/server.js:109" + ], + "_requestWSDL, wsdl in cache %s": [ + "debug:lib/soap.js:23", + "debug:src/soap.js:23" + ], + "createClient params: wsdl url: %s client options: %j": [ + "debug:lib/soap.js:46", + "debug:src/soap.js:47" + ], + "listen params: pathOrOptions: %j services: %j xml: %j": [ + "debug:lib/soap.js:53", + "debug:src/soap.js:54" + ], + "Invalid input, only string allowed": [ + "Error:lib/strip-bom.js:13", + "Error:src/strip-bom.js:12" + ], + "forced error on {{createClient}}": [ + "g.f:soap-stub.js:48" + ], + "no client stubbed for %s": [ + "g.f:soap-stub.js:57" + ] +} diff --git a/intl/zz/messages_inverted.json b/intl/zz/messages_inverted.json new file mode 100644 index 00000000..eef227d4 --- /dev/null +++ b/intl/zz/messages_inverted.json @@ -0,0 +1,1387 @@ +{ + "example/json2xml.js": { + "29": [ + "XMLHandler.createSOAPEnvelopeDescriptor('soap')" + ] + }, + "example/weather.js": { + "33": [ + "console.log('Invoking operation: ')" + ], + "37": [ + "console.log('Response envelope:')" + ], + "43": [ + "console.log('Result:')" + ], + "52": [ + "XMLHandler.createSOAPEnvelopeDescriptor('soap')" + ], + "55": [ + "console.log('jsonToXml:')" + ], + "67": [ + "console.log('parseXml:')" + ] + }, + "example/ntlm.js": { + "48": [ + "console.log('Response envelope:')" + ] + }, + "example/stockquote.js": { + "16": [ + "console.log('Response Envelope: \n')" + ], + "18": [ + "console.log('Result: \n')" + ] + }, + "example/xml2json.js": { + "36": [ + "console.log('%s', ... )" + ] + }, + "lib/base.js": { + "68": [ + "xmlBuilder.create(':Envelope')" + ], + "69": [ + "doc.attribute('xmlns:')" + ], + "70": [ + "doc.element(':Header')" + ], + "71": [ + "doc.element(':Body')" + ], + "103": [ + "nsURI.indexOf('http://schemas.xmlsoap.org/')" + ], + "104": [ + "nsURI.indexOf('http://www.w3.org/')" + ], + "105": [ + "nsURI.indexOf('http://xml.apache.org/')" + ] + }, + "lib/parser/xmlHandler.js": { + "103": [ + "val.replace('')" + ], + "135": [ + "element.attribute('xsi:nil')" + ], + "359": [ + "node.attribute('xsi:type')" + ], + "375": [ + "xmlBuilder.create(':Envelope')" + ], + "377": [ + "doc.attribute('xmlns:')" + ], + "378": [ + "doc.element(':Header')" + ], + "379": [ + "doc.element(':Body')" + ], + "437": [ + "debug('XMLHandler parseXML. root: %j xml: %j', ... )" + ], + "726": [ + "selectn('faultcode')", + "selectn('faultcode.$value')" + ], + "734": [ + "selectn('faultstring')", + "selectn('faultstring.$value')" + ], + "738": [ + "selectn('faultactor')", + "selectn('faultactor.$value')" + ], + "742": [ + "selectn('detail')", + "selectn('detail.$value')" + ], + "758": [ + "selectn('Code')", + "selectn('Code')" + ], + "763": [ + "selectn('Value')", + "selectn('Value.$value')" + ], + "767": [ + "selectn('Subcode')", + "selectn('Subcode.$value')" + ], + "771": [ + "selectn('Reason')", + "selectn('reason.$value')" + ], + "775": [ + "selectn('Node')", + "selectn('Node.$value')" + ], + "779": [ + "selectn('Role')", + "selectn('Role.$value')" + ], + "783": [ + "selectn('Detail')", + "selectn('Detail.$value')" + ], + "802": [ + "node.attribute('xmlns:')" + ] + }, + "src/base.js": { + "69": [ + "xmlBuilder.create(':Envelope')" + ], + "71": [ + "doc.attribute('xmlns:')" + ], + "72": [ + "doc.element(':Header')" + ], + "73": [ + "doc.element(':Body')" + ], + "105": [ + "nsURI.indexOf('http://schemas.xmlsoap.org/')" + ], + "107": [ + "nsURI.indexOf('http://www.w3.org/')" + ], + "109": [ + "nsURI.indexOf('http://xml.apache.org/')" + ] + }, + "src/parser/xmlHandler.js": { + "107": [ + "val.replace('')" + ], + "140": [ + "element.attribute('xsi:nil')" + ], + "350": [ + "node.attribute('xsi:type')" + ], + "369": [ + "xmlBuilder.create(':Envelope')" + ], + "372": [ + "doc.attribute('xmlns:')" + ], + "374": [ + "doc.element(':Header')" + ], + "375": [ + "doc.element(':Body')" + ], + "441": [ + "debug('XMLHandler parseXML. root: %j xml: %j', ... )" + ], + "732": [ + "selectn('faultcode.$value')" + ], + "733": [ + "selectn('faultcode')" + ], + "740": [ + "selectn('faultstring.$value')" + ], + "741": [ + "selectn('faultstring')" + ], + "745": [ + "selectn('faultactor.$value')" + ], + "746": [ + "selectn('faultactor')" + ], + "750": [ + "selectn('detail.$value')" + ], + "751": [ + "selectn('detail')" + ], + "765": [ + "selectn('Code')" + ], + "766": [ + "selectn('Code')" + ], + "771": [ + "selectn('Value.$value')" + ], + "772": [ + "selectn('Value')" + ], + "776": [ + "selectn('Subcode.$value')" + ], + "777": [ + "selectn('Subcode')" + ], + "781": [ + "selectn('reason.$value')" + ], + "782": [ + "selectn('Reason')" + ], + "786": [ + "selectn('Node.$value')" + ], + "787": [ + "selectn('Node')" + ], + "791": [ + "selectn('Role.$value')" + ], + "792": [ + "selectn('Role')" + ], + "796": [ + "selectn('Detail.$value')" + ], + "797": [ + "selectn('Detail')" + ], + "815": [ + "node.attribute('xmlns:')" + ] + }, + "lib/parser/wsdl.js": { + "169": [ + "debugInclude('includes/imports: ')" + ], + "188": [ + "debugInclude('Processing: ')" + ], + "275": [ + "debug('Start element: %j', ... )" + ], + "286": [ + "debug('WSDL error: %s ', ... )" + ], + "301": [ + "Definitions('definitions')" + ], + "302": [ + "Types('types')" + ], + "308": [ + "g.f('49569f279dd1e347fd90d448fdafbb93')" + ], + "314": [ + "debug('End element: %s', ... )" + ], + "329": [ + "debug('WSDL xml: %s', ... )" + ], + "358": [ + "ns.indexOf('http://schemas.xmlsoap.org/')" + ], + "359": [ + "ns.indexOf('http://www.w3.org/')" + ], + "360": [ + "ns.indexOf('http://xml.apache.org/')" + ], + "419": [ + "debug('wsdl open. request_headers: %j request_options: %j', ... )" + ], + "429": [ + "debug('Reading file: %s', ... )" + ], + "452": [ + "g.f('fab749587c48e724a661d77a44084214')" + ], + "493": [ + "debug('wsdl open. request_headers: %j request_options: %j', ... )" + ] + }, + "src/parser/wsdl.js": { + "181": [ + "debugInclude('includes/imports: ')" + ], + "201": [ + "debugInclude('Processing: ')" + ], + "293": [ + "debug('Start element: %j', ... )" + ], + "304": [ + "debug('WSDL error: %s ', ... )" + ], + "319": [ + "Definitions('definitions')" + ], + "320": [ + "Types('types')" + ], + "326": [ + "g.f('49569f279dd1e347fd90d448fdafbb93')" + ], + "332": [ + "debug('End element: %s', ... )" + ], + "347": [ + "debug('WSDL xml: %s', ... )" + ], + "377": [ + "ns.indexOf('http://schemas.xmlsoap.org/')" + ], + "379": [ + "ns.indexOf('http://www.w3.org/')" + ], + "381": [ + "ns.indexOf('http://xml.apache.org/')" + ], + "442": [ + "debug('wsdl open. request_headers: %j request_options: %j', ... )" + ], + "453": [ + "debug('Reading file: %s', ... )" + ], + "478": [ + "g.f('fab749587c48e724a661d77a44084214')" + ], + "521": [ + "debug('wsdl open. request_headers: %j request_options: %j', ... )" + ] + }, + "lib/client.js": { + "119": [ + "debug('client request. operation: %s args: %j options: %j extraHeaders: %j', ... )" + ], + "131": [ + "debug('client request. soapNsURI: %s soapNsPrefix: %s ', ... )" + ], + "145": [ + "debug('client request. soapAction: %s', ... )" + ], + "148": [ + "debugSensitive('client request. options: %j', ... )" + ], + "158": [ + "debug('client request. headers: %j', ... )" + ], + "170": [ + "debugSensitive('client request. options: %j', ... )" + ], + "174": [ + "debugSensitive('client request. options: %j', ... )" + ], + "211": [ + "debugDetail('client request. operationDescriptor: %j', ... )" + ], + "214": [ + "debug('client request. inputBodyDescriptor: %j', ... )" + ], + "218": [ + "debug('client request, calling jsonToXml. args: %j', ... )" + ], + "235": [ + "debug('Request envelope: %s', ... )" + ], + "241": [ + "self.emit('message')" + ], + "242": [ + "self.emit('request')" + ], + "258": [ + "self.emit('response')" + ], + "260": [ + "debug('client response. response: %j body: %j', ... )" + ], + "269": [ + "body.indexOf('')", + "body.indexOf('')" + ], + "275": [ + "debugDetail('client response. outputEnvDescriptor: %j', ... )" + ], + "280": [ + "debug('client response. error message: %s', ... )" + ], + "283": [ + "debug('client response. output not present')" + ], + "293": [ + "self.emit('soapError')" + ], + "302": [ + "g.f('738cd872b93488bfd87f26224d09e26d')" + ], + "328": [ + "debug('client response. result: %j body: %j obj.Header: %j', ... )" + ], + "338": [ + "debug('client response. lastRequestHeaders: %j', ... )" + ] + }, + "src/client.js": { + "122": [ + "debug('client request. operation: %s args: %j options: %j extraHeaders: %j', ... )" + ], + "134": [ + "debug('client request. soapNsURI: %s soapNsPrefix: %s ', ... )" + ], + "148": [ + "debug('client request. soapAction: %s', ... )" + ], + "151": [ + "debugSensitive('client request. options: %j', ... )" + ], + "161": [ + "debug('client request. headers: %j', ... )" + ], + "173": [ + "debugSensitive('client request. options: %j', ... )" + ], + "177": [ + "debugSensitive('client request. options: %j', ... )" + ], + "217": [ + "debugDetail('client request. operationDescriptor: %j', ... )" + ], + "220": [ + "debug('client request. inputBodyDescriptor: %j', ... )" + ], + "225": [ + "debug('client request, calling jsonToXml. args: %j', ... )" + ], + "242": [ + "debug('Request envelope: %s', ... )" + ], + "248": [ + "self.emit('message')" + ], + "249": [ + "self.emit('request')" + ], + "266": [ + "self.emit('response')" + ], + "268": [ + "debug('client response. response: %j body: %j', ... )" + ], + "277": [ + "body.indexOf('')", + "body.indexOf('')" + ], + "283": [ + "debugDetail('client response. outputEnvDescriptor: %j', ... )" + ], + "288": [ + "debug('client response. error message: %s', ... )" + ], + "291": [ + "debug('client response. output not present')" + ], + "301": [ + "self.emit('soapError')" + ], + "310": [ + "g.f('738cd872b93488bfd87f26224d09e26d')" + ], + "337": [ + "debug('client response. result: %j body: %j obj.Header: %j', ... )" + ], + "347": [ + "debug('client response. lastRequestHeaders: %j', ... )" + ] + }, + "lib/server.js": { + "29": [ + "debug('Server parameters: path: %s services: %j wsdl: %j', ... )" + ], + "34": [ + "server.listeners('request')" + ], + "36": [ + "server.removeAllListeners('request')" + ], + "37": [ + "server.addListener('request')" + ], + "64": [ + "self.log('info')" + ], + "70": [ + "self.log('info')" + ], + "72": [ + "res.setHeader('Content-Type')" + ], + "77": [ + "res.setHeader('Content-Type')" + ], + "84": [ + "req.on('data')" + ], + "88": [ + "req.on('end')" + ], + "98": [ + "self.log('received')" + ], + "107": [ + "self.log('replied')" + ], + "116": [ + "self.log('error')" + ], + "141": [ + "g.f('d40b6f905bf039c4d627ecafb7fdcac5')" + ], + "144": [ + "g.f('bcb4356ee2e7a196b9671acf3989741d')" + ], + "149": [ + "self.log('info')" + ], + "167": [ + "self.log('info')" + ], + "182": [ + "g.f('e158dd1d250f1cc3df497728da556be1')" + ], + "189": [ + "self.emit('request')" + ], + "190": [ + "self.emit('headers')" + ], + "225": [ + "self.emit('request')" + ], + "226": [ + "self.emit('headers')" + ], + "264": [ + "debug('Server operation: %s ', ... )" + ], + "266": [ + "debug('Server executeMethod: error: %s ', ... )" + ], + "288": [ + "debugDetail('Server handleResult. operationDescriptor: %j ', ... )" + ], + "291": [ + "debugDetail('Server handleResult. outputBodyDescriptor: %j ', ... )" + ], + "300": [ + "debug('Server soapNsURI: %s soapNsPrefix: %s', ... )" + ], + "311": [ + "debug('Server handleResult. xml: %s ', ... )" + ], + "328": [ + "headerElement.attribute('soap:mustUnderstand')", + "headerElement.element('wsse:Security')" + ], + "330": [ + "secElement.attribute('xmlns:wsse')", + "secElement.attribute('xmlns:wsu')" + ], + "338": [ + "secElement.attribute('wsu:Id')", + "secElement.element('wsu:Timestamp')" + ], + "339": [ + "tsElement.element('wsu:Created')" + ], + "340": [ + "tsElement.element('wsu:Expires')" + ], + "367": [ + "debugDetail('Server sendError. operationDescriptor: %j ', ... )" + ], + "387": [ + "debugDetail('Server sendError. faultDescriptor: %j ', ... )" + ], + "389": [ + "debug('Server sendError. error.Fault: %j ', ... )" + ], + "398": [ + "debug('Server sendError. Response envelope: %s ', ... )" + ] + }, + "src/server.js": { + "29": [ + "debug('Server parameters: path: %s services: %j wsdl: %j', ... )" + ], + "35": [ + "server.listeners('request')" + ], + "37": [ + "server.removeAllListeners('request')" + ], + "38": [ + "server.addListener('request')" + ], + "66": [ + "self.log('info')" + ], + "72": [ + "self.log('info')" + ], + "74": [ + "res.setHeader('Content-Type')" + ], + "79": [ + "res.setHeader('Content-Type')" + ], + "85": [ + "req.on('data')" + ], + "90": [ + "req.on('end')" + ], + "100": [ + "self.log('received')" + ], + "109": [ + "self.log('replied')" + ], + "119": [ + "self.log('error')" + ], + "143": [ + "g.f('d40b6f905bf039c4d627ecafb7fdcac5')" + ], + "146": [ + "g.f('bcb4356ee2e7a196b9671acf3989741d')" + ], + "151": [ + "self.log('info')" + ], + "169": [ + "self.log('info')" + ], + "185": [ + "g.f('e158dd1d250f1cc3df497728da556be1')" + ], + "192": [ + "self.emit('request')" + ], + "194": [ + "self.emit('headers')" + ], + "229": [ + "self.emit('request')" + ], + "231": [ + "self.emit('headers')" + ], + "268": [ + "debug('Server operation: %s ', ... )" + ], + "270": [ + "debug('Server executeMethod: error: %s ', ... )" + ], + "296": [ + "debugDetail('Server handleResult. operationDescriptor: %j ', ... )" + ], + "299": [ + "debugDetail('Server handleResult. outputBodyDescriptor: %j ', ... )" + ], + "308": [ + "debug('Server soapNsURI: %s soapNsPrefix: %s', ... )" + ], + "320": [ + "debug('Server handleResult. xml: %s ', ... )" + ], + "339": [ + "headerElement.element('wsse:Security')" + ], + "340": [ + "headerElement.attribute('soap:mustUnderstand')" + ], + "343": [ + "secElement.attribute('xmlns:wsse')" + ], + "345": [ + "secElement.attribute('xmlns:wsu')" + ], + "354": [ + "secElement.element('wsu:Timestamp')" + ], + "355": [ + "secElement.attribute('wsu:Id')" + ], + "356": [ + "tsElement.element('wsu:Created')" + ], + "357": [ + "tsElement.element('wsu:Expires')" + ], + "385": [ + "debugDetail('Server sendError. operationDescriptor: %j ', ... )" + ], + "407": [ + "debugDetail('Server sendError. faultDescriptor: %j ', ... )" + ], + "409": [ + "debug('Server sendError. error.Fault: %j ', ... )" + ], + "418": [ + "debug('Server sendError. Response envelope: %s ', ... )" + ] + }, + "lib/http.js": { + "80": [ + "debug('Http request: %j', ... )" + ], + "92": [ + "debug('Http response body: %j', ... )" + ], + "145": [ + "debugSensitive('NTLM options: %j for method: %s', ... )" + ], + "146": [ + "debug('httpntlm method: %s', ... )" + ] + }, + "src/http.js": { + "81": [ + "debug('Http request: %j', ... )" + ], + "93": [ + "debug('Http response body: %j', ... )" + ], + "147": [ + "debugSensitive('NTLM options: %j for method: %s', ... )" + ], + "148": [ + "debug('httpntlm method: %s', ... )" + ] + }, + "lib/parser/element.js": { + "81": [ + "indexOf('any')" + ], + "82": [ + "debug('Element %s is not allowed within %j', ... )" + ], + "89": [ + "debug('Element created: ')" + ], + "126": [ + "g.f('61b096fd390a169fc86698a3fe30387f')" + ], + "191": [ + "debug('Schema not found: %s (%s)', ... )" + ], + "219": [ + "debug('Schema %s not found: %s %s', ... )" + ], + "226": [ + "debug('Unknown element: %s %s', ... )" + ] + }, + "src/parser/element.js": { + "85": [ + "indexOf('any')" + ], + "86": [ + "debug('Element %s is not allowed within %j', ... )" + ], + "93": [ + "debug('Element created: ')" + ], + "131": [ + "g.f('61b096fd390a169fc86698a3fe30387f')" + ], + "198": [ + "debug('Schema not found: %s (%s)', ... )" + ], + "226": [ + "debug('Schema %s not found: %s %s', ... )" + ], + "233": [ + "debug('Unknown element: %s %s', ... )" + ] + }, + "lib/parser/helper.js": { + "95": [ + "crypto.createHash('sha1')" + ], + "98": [ + "pwHash.digest('base64')" + ] + }, + "lib/security/WSSecurity.js": { + "46": [ + "headerElement.element('wsse:Security')" + ], + "48": [ + "secElement.attribute('soap:actor')" + ], + "51": [ + "secElement.attribute('soap:mustUnderstand')" + ], + "54": [ + "secElement.attribute('xmlns:wsse')", + "secElement.attribute('xmlns:wsu')" + ], + "62": [ + "secElement.attribute('wsu:Id')", + "secElement.element('wsu:Timestamp')" + ], + "63": [ + "tsElement.element('wsu:Created')" + ], + "64": [ + "tsElement.element('wsu:Expires')" + ], + "67": [ + "secElement.element('wsse:UsernameToken')", + "secElement.attribute('wsu:Id')" + ], + "69": [ + "userNameElement.element('wsse:Username')" + ], + "71": [ + "userNameElement.element('wsu:Created')" + ], + "77": [ + "crypto.createHash('sha1')" + ], + "79": [ + "nHash.digest('base64')" + ], + "84": [ + "userNameElement.attribute('Type')", + "userNameElement.element('wsse:Password')" + ], + "87": [ + "userNameElement.attribute('EncodingType')", + "userNameElement.element('wsse:Nonce')" + ], + "90": [ + "userNameElement.attribute('Type')", + "userNameElement.element('wsse:Password')" + ], + "92": [ + "userNameElement.attribute('EncodingType')", + "userNameElement.element('wsse:Nonce')" + ] + }, + "lib/utils.js": { + "6": [ + "crypto.createHash('sha1')" + ], + "9": [ + "pwHash.digest('base64')" + ], + "14": [ + "crypto.createHash('sha1')" + ], + "17": [ + "pwHash.digest('base64')" + ] + }, + "src/parser/helper.js": { + "99": [ + "crypto.createHash('sha1')" + ], + "102": [ + "pwHash.digest('base64')" + ] + }, + "src/security/WSSecurity.js": { + "52": [ + "headerElement.element('wsse:Security')" + ], + "54": [ + "secElement.attribute('soap:actor')" + ], + "57": [ + "secElement.attribute('soap:mustUnderstand')" + ], + "61": [ + "secElement.attribute('xmlns:wsse')" + ], + "63": [ + "secElement.attribute('xmlns:wsu')" + ], + "72": [ + "secElement.element('wsu:Timestamp')" + ], + "73": [ + "secElement.attribute('wsu:Id')" + ], + "74": [ + "tsElement.element('wsu:Created')" + ], + "75": [ + "tsElement.element('wsu:Expires')" + ], + "78": [ + "secElement.element('wsse:UsernameToken')" + ], + "79": [ + "secElement.attribute('wsu:Id')" + ], + "81": [ + "userNameElement.element('wsse:Username')" + ], + "83": [ + "userNameElement.element('wsu:Created')" + ], + "89": [ + "crypto.createHash('sha1')" + ], + "91": [ + "nHash.digest('base64')" + ], + "96": [ + "userNameElement.element('wsse:Password')" + ], + "97": [ + "userNameElement.attribute('Type')" + ], + "102": [ + "userNameElement.element('wsse:Nonce')" + ], + "103": [ + "userNameElement.attribute('EncodingType')" + ], + "108": [ + "userNameElement.element('wsse:Password')" + ], + "109": [ + "userNameElement.attribute('Type')" + ], + "113": [ + "userNameElement.element('wsse:Nonce')" + ], + "114": [ + "userNameElement.attribute('EncodingType')" + ] + }, + "src/utils.js": { + "6": [ + "crypto.createHash('sha1')" + ], + "9": [ + "pwHash.digest('base64')" + ], + "14": [ + "crypto.createHash('sha1')" + ], + "21": [ + "pwHash.digest('base64')" + ] + }, + "lib/parser/qname.js": { + "27": [ + "g.f('39e07c5a6797c4923d6a924999b62f8c')" + ] + }, + "src/parser/qname.js": { + "28": [ + "g.f('39e07c5a6797c4923d6a924999b62f8c')" + ] + }, + "lib/parser/wsdl/definitions.js": { + "32": [ + "Schema('xs:schema')" + ] + }, + "src/parser/wsdl/definitions.js": { + "34": [ + "Schema('xs:schema')" + ] + }, + "lib/parser/wsdl/operation.js": { + "85": [ + "g.warn('da96ad47da6be6a613f921b260a33ce0')" + ], + "99": [ + "g.warn('da96ad47da6be6a613f921b260a33ce0')" + ], + "199": [ + "g.f('37e4bf66d90c313e7adb3317345be046')" + ], + "330": [ + "console.error('Document/literal part should use element')" + ], + "331": [ + "Error('Document/literal part should use element')" + ] + }, + "src/parser/wsdl/operation.js": { + "84": [ + "g.warn('da96ad47da6be6a613f921b260a33ce0')" + ], + "100": [ + "g.warn('da96ad47da6be6a613f921b260a33ce0')" + ], + "207": [ + "g.f('37e4bf66d90c313e7adb3317345be046')" + ], + "355": [ + "console.error('Document/literal part should use element')" + ], + "356": [ + "Error('Document/literal part should use element')" + ] + }, + "lib/parser/wsdl/parameter.js": { + "36": [ + "console.error('Unable to resolve message %s for', ... )" + ], + "37": [ + "Error('Unable to resolve message ')" + ], + "68": [ + "debug('Message not found: ')" + ], + "90": [ + "debug('Message not found: ')" + ] + }, + "src/parser/wsdl/parameter.js": { + "36": [ + "console.error('Unable to resolve message %s for', ... )" + ], + "37": [ + "Error('Unable to resolve message ')" + ], + "68": [ + "debug('Message not found: ')" + ], + "90": [ + "debug('Message not found: ')" + ] + }, + "lib/parser/xsd/keybase.js": { + "16": [ + "g.warn('1f2c65133b5bb463e7d1fceda5b31156')" + ], + "26": [ + "g.warn('1f2c65133b5bb463e7d1fceda5b31156')" + ], + "29": [ + "g.warn('46ad858fdf2e460aa3b626d6455362f2')" + ] + }, + "src/parser/xsd/keybase.js": { + "16": [ + "g.warn('1f2c65133b5bb463e7d1fceda5b31156')" + ], + "28": [ + "g.warn('1f2c65133b5bb463e7d1fceda5b31156')" + ], + "33": [ + "g.warn('46ad858fdf2e460aa3b626d6455362f2')" + ] + }, + "lib/parser/xsd/list.js": { + "26": [ + "g.warn('28c828192eb440b64b8efd7f08cc37b3')" + ], + "28": [ + "g.warn('d7bda8e2c3faafdf0988f8cb4719a01d')" + ], + "34": [ + "g.warn('97ed6b53b9b594fb90c6bfb2e0ba0286')" + ] + }, + "src/parser/xsd/list.js": { + "27": [ + "g.warn('28c828192eb440b64b8efd7f08cc37b3')" + ], + "30": [ + "g.warn('d7bda8e2c3faafdf0988f8cb4719a01d')" + ], + "36": [ + "g.warn('97ed6b53b9b594fb90c6bfb2e0ba0286')" + ] + }, + "lib/parser/xsd/restriction.js": { + "107": [ + "violations.push(' <= ')", + "violations.push('value is less or equal than minExclusive (')" + ], + "113": [ + "violations.push(' < ')", + "violations.push('value is less than minInclusive (')" + ], + "119": [ + "violations.push(' >= ')", + "violations.push('value is greater or equal than maxExclusive (')" + ], + "125": [ + "violations.push(' > ')", + "violations.push('value is greater than maxInclusive (')" + ], + "133": [ + "violations.push(' > ')", + "violations.push('value has more decimal places than allowed (')" + ], + "144": [ + "violations.push(' > ')", + "violations.push('value has more digits than allowed (')" + ], + "149": [ + "violations.push(' > ')", + "violations.push('value has more integer digits than allowed (')" + ], + "158": [ + "violations.push(' != ')", + "violations.push('lengths don't match (')" + ], + "164": [ + "violations.push(' > ')", + "violations.push('length is bigger than maxLength (')" + ], + "170": [ + "violations.push(' < ')", + "violations.push('length is smaller than minLength (')" + ], + "182": [ + "violations.push(' !match ')", + "violations.push('value doesn't match the required pattern (')" + ], + "188": [ + "violations.push(' is not in ')", + "violations.push('value is not in the list of valid values (')" + ], + "193": [ + "g.f('ad16b1c54d1a687cb4efc849e918816c')" + ] + }, + "src/parser/xsd/restriction.js": { + "109": [ + "violations.push(' <= ')", + "violations.push('value is less or equal than minExclusive (')" + ], + "115": [ + "violations.push(' < ')", + "violations.push('value is less than minInclusive (')" + ], + "121": [ + "violations.push(' >= ')", + "violations.push('value is greater or equal than maxExclusive (')" + ], + "127": [ + "violations.push(' > ')", + "violations.push('value is greater than maxInclusive (')" + ], + "135": [ + "violations.push(' > ')", + "violations.push('value has more decimal places than allowed (')" + ], + "146": [ + "violations.push(' > ')", + "violations.push('value has more digits than allowed (')" + ], + "151": [ + "violations.push(' > ')", + "violations.push('value has more integer digits than allowed (')" + ], + "160": [ + "violations.push(' != ')", + "violations.push('lengths don't match (')" + ], + "166": [ + "violations.push(' > ')", + "violations.push('length is bigger than maxLength (')" + ], + "172": [ + "violations.push(' < ')", + "violations.push('length is smaller than minLength (')" + ], + "184": [ + "violations.push(' !match ')", + "violations.push('value doesn't match the required pattern (')" + ], + "190": [ + "violations.push(' is not in ')", + "violations.push('value is not in the list of valid values (')" + ], + "195": [ + "g.f('ad16b1c54d1a687cb4efc849e918816c')" + ] + }, + "lib/parser/xsd.js": { + "11": [ + "SimpleType('xsd:simpleType')" + ] + }, + "src/parser/xsd.js": { + "11": [ + "SimpleType('xsd:simpleType')" + ] + }, + "lib/security/ClientSSLSecurity.js": { + "29": [ + "g.f('6623e372e766ea11d932836035404a2b')" + ], + "39": [ + "g.f('7f7cb47259df769f2d3b3f7133f1a1ea')" + ] + }, + "src/security/ClientSSLSecurity.js": { + "29": [ + "g.f('6623e372e766ea11d932836035404a2b')" + ], + "39": [ + "g.f('7f7cb47259df769f2d3b3f7133f1a1ea')" + ] + }, + "lib/security/ClientSSLSecurityPFX.js": { + "31": [ + "g.f('1b12432ead1b2b9902c4b9801aa0317b')" + ] + }, + "src/security/ClientSSLSecurityPFX.js": { + "31": [ + "g.f('1b12432ead1b2b9902c4b9801aa0317b')" + ] + }, + "lib/security/CookieSecurity.js": { + "6": [ + "cookie.hasOwnProperty('set-cookie')" + ] + }, + "src/security/CookieSecurity.js": { + "6": [ + "cookie.hasOwnProperty('set-cookie')" + ] + }, + "lib/security/WSSecurityCert.js": { + "5": [ + "optional('strong-ursa')" + ], + "41": [ + "g.f('552f3502256707b8c5b12ddb64e3f74e')" + ], + "44": [ + "publicP12PEM.replace('-----BEGIN CERTIFICATE-----')" + ], + "52": [ + "addReference('//*[local-name(.)='Body']')" + ], + "53": [ + "addReference('//*[local-name(.)='Timestamp']')" + ], + "75": [ + "headerElement.element('wsse:Security')", + "headerElement.attribute('xmlns:wsse')" + ], + "76": [ + "secElement.attribute('EncodingType')", + "secElement.element('wsse:BinarySecurityToken')" + ], + "77": [ + "secElement.attribute('wsu:Id')", + "secElement.element('wsu:Timestamp')" + ], + "78": [ + "tsElement.element('wsu:Created')" + ], + "79": [ + "tsElement.element('wsu:Expires')" + ] + }, + "src/security/WSSecurityCert.js": { + "5": [ + "optional('strong-ursa')" + ], + "46": [ + "g.f('552f3502256707b8c5b12ddb64e3f74e')" + ], + "50": [ + "publicP12PEM.replace('-----BEGIN CERTIFICATE-----')" + ], + "61": [ + "addReference('//*[local-name(.)='Body']')" + ], + "62": [ + "addReference('//*[local-name(.)='Timestamp']')" + ], + "85": [ + "headerElement.element('wsse:Security')" + ], + "86": [ + "headerElement.attribute('xmlns:wsse')" + ], + "91": [ + "secElement.element('wsse:BinarySecurityToken')" + ], + "92": [ + "secElement.attribute('EncodingType')" + ], + "98": [ + "secElement.element('wsu:Timestamp')" + ], + "99": [ + "secElement.attribute('wsu:Id')" + ], + "100": [ + "tsElement.element('wsu:Created')" + ], + "101": [ + "tsElement.element('wsu:Expires')" + ] + }, + "lib/soap.js": { + "23": [ + "debug('_requestWSDL, wsdl in cache %s', ... )" + ], + "46": [ + "debug('createClient params: wsdl url: %s client options: %j', ... )" + ], + "53": [ + "debug('listen params: pathOrOptions: %j services: %j xml: %j', ... )" + ] + }, + "src/soap.js": { + "23": [ + "debug('_requestWSDL, wsdl in cache %s', ... )" + ], + "47": [ + "debug('createClient params: wsdl url: %s client options: %j', ... )" + ], + "54": [ + "debug('listen params: pathOrOptions: %j services: %j xml: %j', ... )" + ] + }, + "lib/strip-bom.js": { + "13": [ + "Error('Invalid input, only string allowed')" + ] + }, + "src/strip-bom.js": { + "12": [ + "Error('Invalid input, only string allowed')" + ] + }, + "soap-stub.js": { + "48": [ + "g.f('forced error on {{createClient}}')" + ], + "57": [ + "g.f('no client stubbed for %s', ... )" + ] + } +} diff --git a/src/client.js b/src/client.js index a1fff426..658150be 100644 --- a/src/client.js +++ b/src/client.js @@ -100,7 +100,7 @@ class Client extends Base { }; } - + _invoke(operation, args, location, callback, options, extraHeaders) { var self = this, diff --git a/src/parser/xmlHandler.js b/src/parser/xmlHandler.js index 49d911b5..ca950f28 100644 --- a/src/parser/xmlHandler.js +++ b/src/parser/xmlHandler.js @@ -107,14 +107,27 @@ class XMLHandler { val = val.replace("",""); element.cdata(val); - }else if(isSimple && typeof val !== "undefined" && val !== null + }else if(isSimple && typeof val !== "undefined" && val !== null && typeof val[this.options.xmlKey] !== "undefined") { - val = val[this.options.xmlKey]; + val = val[this.options.xmlKey]; element = node.element(elementName); element.raw(val); - }else { + } else { + // Enforce the type restrictions if configured for such + if (this.options.enforceRestrictions && descriptor.type) { + const schema = this.schemas[descriptor.type.nsURI]; + if (schema) { + const type = schema.simpleTypes[descriptor.type.name]; + if (type) { + const restriction = type.restriction; + if (restriction) { + val = restriction.enforce(val); + } + } + } + } element = isSimple ? node.element(elementName, val) : node.element(elementName); - } + } if (xmlns && descriptor.qname.nsURI) { element.attribute(xmlns, descriptor.qname.nsURI); @@ -141,6 +154,7 @@ class XMLHandler { } return node; } else if ( val != null) { + let attrs = val[this.options.attributesKey]; if (typeof attrs === 'object') { for (let p in attrs) { @@ -160,7 +174,7 @@ class XMLHandler { } } } - } + } } //val is not an object - simple or date types if (val != null && ( typeof val !== 'object' || val instanceof Date)) { @@ -173,14 +187,14 @@ class XMLHandler { } if (nameSpaceContextCreated) { nsContext.popContext(); - } + } return node; } this.mapObject(element, nsContext, descriptor, val, attrs); if (nameSpaceContextCreated) { nsContext.popContext(); - } + } return node; } @@ -216,8 +230,8 @@ class XMLHandler { var xsiTypeInfo = schema.complexTypes[xsiType.name] || schema.simpleTypes[xsiType.name]; - // The type might not be described - // describe() takes wsdl definitions + // The type might not be described + // describe() takes wsdl definitions xsiTypeDescriptor = xsiTypeInfo && xsiTypeInfo.describe({schemas: this.schemas}); } break; @@ -284,7 +298,7 @@ class XMLHandler { } } - // handle later if value is an array + // handle later if value is an array if (!Array.isArray(val)) { const names = this._sortKeys(val, elementOrder); for (let p of names) { @@ -293,15 +307,15 @@ class XMLHandler { let child = val[p]; let childDescriptor = elements[p] || attributes[p]; if (childDescriptor == null) { - if (this.options.ignoreUnknownProperties) + if (this.options.ignoreUnknownProperties) continue; - else + else childDescriptor = new ElementDescriptor( QName.parse(p), null, 'unqualified', Array.isArray(child)); } if (childDescriptor) { this.jsonToXml(node, nsContext, childDescriptor, child); - } + } } } @@ -561,7 +575,7 @@ class XMLHandler { attrs[a] = xsiType.name; if(xsiType.prefix){ xsiXmlns = nsContext.getNamespaceURI(xsiType.prefix); - } + } } } let attrName = qname.name; @@ -656,7 +670,7 @@ class XMLHandler { var top = stack[stack.length - 1]; self._processText(top, text); }; - + p.ontext = function(text) { text = text && text.trim(); if (!text.length) @@ -800,7 +814,7 @@ function declareNamespace(nsContext, node, prefix, nsURI) { } else if (node) { node.attribute('xmlns:' + mapping.prefix, mapping.uri); return mapping; - } + } return mapping; } diff --git a/src/parser/xsd/restriction.js b/src/parser/xsd/restriction.js index e0f43c5a..8ec3f222 100644 --- a/src/parser/xsd/restriction.js +++ b/src/parser/xsd/restriction.js @@ -4,6 +4,7 @@ var XSDElement = require('./xsdElement'); var Sequence = require('./sequence'); var Choice = require('./choice'); var QName = require('../qname'); +var g = require('../../globalize'); class Restriction extends XSDElement { constructor(nsName, attrs, options) { @@ -77,6 +78,125 @@ class Restriction extends XSDElement { this.base.postProcess(defintions); } } + + _getFractionDigitCount(val) { + var lastDotPos = val.lastIndexOf('.'); + if (lastDotPos !== -1) { + return val.length - 1 - lastDotPos; + } + + return 0; + } + + _getTotalDigitCount(val) { + var stripped = val.replace('-', '').replace('.', '').trim(); + return stripped.length; + } + + enforce(val) { + var violations = []; + + if (this.base) { + if (this.base.jsType === Boolean) { + val = val === 'true' || val === true; + } else if (typeof this.base.jsType === 'function' && this.base.jsType !== Date && this.base.jsType !== Number) { + val = this.base.jsType(val); + } + } + + if (this.minExclusive !== undefined) { + if (val <= this.minExclusive) { + violations.push('value is less or equal than minExclusive (' + val + ' <= ' + this.minExclusive + ')'); + } + } + + if (this.minInclusive !== undefined) { + if (val < this.minInclusive) { + violations.push('value is less than minInclusive (' + val + ' < ' + this.minInclusive + ')'); + } + } + + if (this.maxExclusive !== undefined) { + if (val >= this.maxExclusive) { + violations.push('value is greater or equal than maxExclusive (' + val + ' >= ' + this.maxExclusive + ')'); + } + } + + if (this.maxInclusive !== undefined) { + if (val > this.maxInclusive) { + violations.push('value is greater than maxInclusive (' + val + ' > ' + this.maxInclusive + ')'); + } + } + + if (this.fractionDigits !== undefined) { + if (typeof val === 'string') { + var fractionDigitCount = this._getFractionDigitCount(val); + if (fractionDigitCount > this.fractionDigits) { + violations.push('value has more decimal places than allowed (' + fractionDigitCount + ' > ' + this.fractionDigits + ')'); + } + } else if (typeof val === 'number') { + val = val.toFixed(this.fractionDigits); + } + } + + if (this.totalDigits !== undefined) { + if (typeof val === 'string') { + var totalDigits = this._getTotalDigitCount(val); + if (totalDigits > this.totalDigits) { + violations.push('value has more digits than allowed (' + totalDigits + ' > ' + this.totalDigits + ')'); + } + } else if (typeof val === 'number') { + var integerDigits = parseInt(val).toString().replace('-', '').length; + if (integerDigits > this.totalDigits) { + violations.push('value has more integer digits than allowed (' + integerDigits + ' > ' + this.totalDigits + ')'); + } else { + val = val.toFixed(this.totalDigits - integerDigits); + } + } + } + + if (this.length !== undefined) { + if (val.length !== parseInt(this.length)) { + violations.push('lengths don\'t match (' + val.length + ' != ' + this.length + ')'); + } + } + + if (this.maxLength !== undefined) { + if (val.length > this.maxLength) { + violations.push('length is bigger than maxLength (' + val.length + ' > ' + this.maxLength + ')'); + } + } + + if (this.minLength !== undefined) { + if (val.length < this.minLength) { + violations.push('length is smaller than minLength (' + val.length + ' < ' + this.minLength + ')'); + } + } + + if (this.whiteSpace === 'replace') { + val = val.replace(/[\n\r\t]/mg, ' '); + } else if (this.whiteSpace === 'collapse') { + val = val.replace(/[\n\r\t]/mg, ' ').replace(/[ ]+/mg, ' ').trim(); + } + + if (this.pattern) { + if (!new RegExp(this.pattern).test(val)) { + violations.push('value doesn\'t match the required pattern (' + val + ' !match ' + this.pattern + ')'); + } + } + + if (this.enumeration) { + if (this.enumeration.indexOf(val) === -1) { + violations.push('value is not in the list of valid values (' + val + ' is not in ' + this.enumeration + ')'); + } + } + + if (violations.length > 0) { + throw new Error(g.f('The field %s cannot have value %s due to the violations: %s', this.parent.$name, val, JSON.stringify(violations))); + } + + return val; + } } Restriction.elementName = 'restriction'; diff --git a/test/client-restrictions-test.js b/test/client-restrictions-test.js new file mode 100644 index 00000000..829383e4 --- /dev/null +++ b/test/client-restrictions-test.js @@ -0,0 +1,356 @@ +'use strict'; + +var fs = require('fs'), + soap = require('..').soap, + http = require('http'), + assert = require('assert'); + +describe('SOAP Client', function() { + describe('with enforce restrictions option as true', function () { + var server = null; + var hostname = '127.0.0.1'; + var port = 0; + + + before(function (done) { + server = http.createServer(function (req, res) { + res.statusCode = 200; + fs.createReadStream(__dirname + '/soap-failure.xml').pipe(res); + }).listen(port, hostname, done); + }); + + after(function (done) { + server.close(); + server = null; + done(); + }); + + it('should NOT throw if the values don\'t match the restrictions', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + client.on('message', function (xml) { + const expectedXml = '\n' + + ' \n' + + ' true\n' + + ' true\n' + + ' 6\n' + + ' 5\n' + + ' 4\n' + + ' 5\n' + + ' 12.1\n' + + ' 12\n' + + ' -2234\n' + + ' -1025\n' + + ' 12345\n' + + ' abc\n' + + ' abcdef\n' + + ' abc ced \n' + + ' abc ced\n' + + ' 12345678\n' + + ' validValue1\n' + + ' validValue2\n' + + ' validValue2\n' + + ' \n' + + '\n'; + assert.equal(xml, expectedXml); + done(); + }); + + client.TestRestrictions({ + RestrictionRequest: { + boolean: 'true', + boolean2: true, + minExclusive: 6, + minInclusive: 5, + maxExclusive: 4, + maxInclusive: 5, + fractionDigits: 12.1, + fractionDigits2: '12', + totalDigits: '-2234', + totalDigits2: -1025, + length: '12345', + maxLength: 'abc', + minLength: 'abcdef', + whiteSpaceReplace: ' \nabc\r\n\t ced ', + whiteSpaceCollapse: ' \nabc\r\r \n\t \n \t ced ', + pattern: '12345678', + enumeration1: 'validValue1', + enumeration2: 'validValue2', + enumeration3: 'validValue2', + } + }, function () { }); + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the minExclusive doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + + try { + client.TestRestrictions({ + RestrictionRequest: { + minExclusive: 5 + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field MinExclusiveType cannot have value 5 due to the violations: ["value is less or equal than minExclusive (5 <= 5)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the minInclusive doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + minInclusive: 4, + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field MinInclusiveType cannot have value 4 due to the violations: ["value is less than minInclusive (4 < 5)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the maxExclusive doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + maxExclusive: 5 + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field MaxExclusiveType cannot have value 5 due to the violations: ["value is greater or equal than maxExclusive (5 >= 5)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the maxInclusive doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + maxInclusive: 6 + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field MaxInclusiveType cannot have value 6 due to the violations: ["value is greater than maxInclusive (6 > 5)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the fractionDigits doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + fractionDigits: '12.123' + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field FractionDigitsType cannot have value 12.123 due to the violations: ["value has more decimal places than allowed (3 > 1)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the totalDigits with a string doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + totalDigits: '12345' + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field TotalDigitsType cannot have value 12345 due to the violations: ["value has more digits than allowed (5 > 4)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the totalDigits with an integer doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + totalDigits: 12345 + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field TotalDigitsType cannot have value 12345 due to the violations: ["value has more integer digits than allowed (5 > 4)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the totalDigits with a decimal doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + totalDigits: '1234.2' + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field TotalDigitsType cannot have value 1234.2 due to the violations: ["value has more digits than allowed (5 > 4)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the length doesn\'t match its restriction (bigger than)', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + length: '123456' + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field LengthType cannot have value 123456 due to the violations: ["lengths don\'t match (6 != 5)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the length doesn\'t match its restriction (smaller than)', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + length: '1234' + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field LengthType cannot have value 1234 due to the violations: ["lengths don\'t match (4 != 5)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the maxLength doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + maxLength: 'abcdef' + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field MaxLengthType cannot have value abcdef due to the violations: ["length is bigger than maxLength (6 > 5)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the minLength doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + minLength: 'ab' + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field MinLengthType cannot have value ab due to the violations: ["length is smaller than minLength (2 < 4)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the pattern doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + pattern: 'abcdef' + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field PatternType cannot have value abcdef due to the violations: ["value doesn\'t match the required pattern (abcdef !match [0-9]{8})"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + it('should throw if the enumeration doesn\'t match its restriction', function (done) { + soap.createClient(__dirname + '/wsdl/restrictions.wsdl', { enforceRestrictions: true }, function (err, client) { + assert.equal(err, null); + try { + client.TestRestrictions({ + RestrictionRequest: { + enumeration1: 'validValue1', + enumeration2: 'InvalidValue', + enumeration3: 'validValue2', + } + }, function () { + done('It should have thrown error'); + }); + } catch (err) { + assert.equal(err.message, 'The field EnumerationType cannot have value InvalidValue due to the violations: ["value is not in the list of valid values (InvalidValue is not in validValue1,validValue2)"]'); + done(); + } + + }, 'http://' + hostname + ":" + server.address().port); + }); + + }); + +}); diff --git a/test/wsdl/restriction_types.xsd b/test/wsdl/restriction_types.xsd new file mode 100644 index 00000000..421ece4a --- /dev/null +++ b/test/wsdl/restriction_types.xsd @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/wsdl/restrictions.wsdl b/test/wsdl/restrictions.wsdl new file mode 100644 index 00000000..43d6c46f --- /dev/null +++ b/test/wsdl/restrictions.wsdl @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 1408d59b0483ac3b641ae6095044235a24afcc5e Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Tue, 22 Jan 2019 15:20:40 -0800 Subject: [PATCH 56/89] 1.15.0 * Adding enforce restrictions option (Romeu Palos de Gouvea) --- CHANGES.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 93741312..b15c8b2f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +2019-01-22, Version 1.15.0 +========================== + + * Adding enforce restrictions option (Romeu Palos de Gouvea) + + 2018-10-18, Version 1.14.0 ========================== diff --git a/package.json b/package.json index 718c79a3..a393b9a4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.14.0", + "version": "1.15.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From c8aaed79733e690854fb6d665bbfb6a54617e571 Mon Sep 17 00:00:00 2001 From: Jon Roberts Date: Thu, 14 Feb 2019 16:59:04 +0000 Subject: [PATCH 57/89] Update version of httpntlm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a393b9a4..ba252b1a 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "dependencies": { "compress": "^0.99.0", "debug": "^3.1.0", - "httpntlm": "^1.6.1", + "httpntlm": "^1.7.6", "lodash": "^4.13.1", "optional": "^0.1.3", "path": "^0.12.7", From d3c4b3d9283202b8f6949bc1a6f0246f61dfa077 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 14 Feb 2019 09:14:44 -0800 Subject: [PATCH 58/89] 1.16.0 * Update version of httpntlm (Jon Roberts) --- CHANGES.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index b15c8b2f..94995cdd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +2019-02-14, Version 1.16.0 +========================== + + * Update version of httpntlm (Jon Roberts) + + 2019-01-22, Version 1.15.0 ========================== diff --git a/package.json b/package.json index ba252b1a..22d182bd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.15.0", + "version": "1.16.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From 2d8473b8c1d285405483c42034cdc5b666792837 Mon Sep 17 00:00:00 2001 From: JB Date: Tue, 19 Feb 2019 17:42:50 +0100 Subject: [PATCH 59/89] Fix use options.request in wsdl.js options.request was not used when retrieving sub-schemas. --- src/parser/wsdl.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/parser/wsdl.js b/src/parser/wsdl.js index 44a3334d..8daaebb0 100644 --- a/src/parser/wsdl.js +++ b/src/parser/wsdl.js @@ -164,6 +164,10 @@ class WSDL { if (options.httpClient) { this.options.httpClient = options.httpClient; } + + if (options.request) { + this.options.request = options.request; + } var ignoreBaseNameSpaces = options ? options.ignoreBaseNameSpaces : null; if (ignoreBaseNameSpaces !== null && From 473b6354d74a0dbe32fc8f621b6e1dd04c03bbb2 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 21 Feb 2019 13:46:31 -0800 Subject: [PATCH 60/89] 1.17.0 * Fix use options.request in wsdl.js (JB) --- CHANGES.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 94995cdd..55cf7fa0 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +2019-02-21, Version 1.17.0 +========================== + + * Fix use options.request in wsdl.js (JB) + + 2019-02-14, Version 1.16.0 ========================== diff --git a/package.json b/package.json index 22d182bd..4347e0bb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.16.0", + "version": "1.17.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From de2ee660e283a03460f9ed3121e57a1e504bbaf2 Mon Sep 17 00:00:00 2001 From: jannyHou Date: Fri, 1 Mar 2019 14:26:24 -0500 Subject: [PATCH 61/89] fix: update lodash --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4347e0bb..ab273830 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "compress": "^0.99.0", "debug": "^3.1.0", "httpntlm": "^1.7.6", - "lodash": "^4.13.1", + "lodash": "^4.17.11", "optional": "^0.1.3", "path": "^0.12.7", "request": "^2.72.0", From edd5dad46f1d37da98658afddbed6550f63e5c76 Mon Sep 17 00:00:00 2001 From: arthmoeros Date: Wed, 27 Mar 2019 18:14:46 -0300 Subject: [PATCH 62/89] Fix for xs:date with tz format --- src/parser/xmlHandler.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/parser/xmlHandler.js b/src/parser/xmlHandler.js index ca950f28..aa91e942 100644 --- a/src/parser/xmlHandler.js +++ b/src/parser/xmlHandler.js @@ -823,7 +823,13 @@ function parseValue(text, descriptor) { var value = text; var jsType = descriptor && descriptor.jsType; if (jsType === Date) { - value = new Date(text); + var dateText = text; + // Checks for xs:date with tz + // (examples: 2019-03-26Z or 2019-03-26-06:00) + if(dateText.endsWith('Z') || dateText.length === 16){ + dateText = text.substr(0, 10); + } + value = new Date(dateText); } else if (jsType === Boolean) { if (text === 'true') { value = true; From 6780072e118a97fe62c46dd70d22af556e73d109 Mon Sep 17 00:00:00 2001 From: arthmoeros Date: Wed, 27 Mar 2019 21:29:33 -0300 Subject: [PATCH 63/89] Tests for parseValue with xsd date dateTime --- src/parser/xmlHandler.js | 9 +++++--- test/xs-date-format-test.js | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 test/xs-date-format-test.js diff --git a/src/parser/xmlHandler.js b/src/parser/xmlHandler.js index aa91e942..9b305064 100644 --- a/src/parser/xmlHandler.js +++ b/src/parser/xmlHandler.js @@ -824,9 +824,10 @@ function parseValue(text, descriptor) { var jsType = descriptor && descriptor.jsType; if (jsType === Date) { var dateText = text; - // Checks for xs:date with tz - // (examples: 2019-03-26Z or 2019-03-26-06:00) - if(dateText.endsWith('Z') || dateText.length === 16){ + // Checks for xs:date with tz, drops the tz + // because xs:date doesn't have a time to offset + // and JS Date object doesn't store an arbitrary tz + if(dateText.length === 16){ dateText = text.substr(0, 10); } value = new Date(dateText); @@ -843,3 +844,5 @@ function parseValue(text, descriptor) { } module.exports = XMLHandler; +// Exported function for testing +module.exports.parseValue = parseValue; diff --git a/test/xs-date-format-test.js b/test/xs-date-format-test.js new file mode 100644 index 00000000..61c21056 --- /dev/null +++ b/test/xs-date-format-test.js @@ -0,0 +1,43 @@ +"use strict"; +var xmlHandler = require('./../src/parser/xmlHandler'); +var assert = require('assert'); + +describe('xs-date-format-tests', function() { + + it('parses a xs:date string with negative tz offset', function () { + var inputDate = '2019-03-27-06:00'; + var parsed = xmlHandler.parseValue(inputDate, {jsType: Date}); + assert.equal(parsed.toISOString(), new Date('2019-03-27').toISOString(), 'expected parsed date'); + }); + + it('parses a xs:date string with positive tz offset', function () { + var inputDate = '2019-03-27+06:00'; + var parsed = xmlHandler.parseValue(inputDate, {jsType: Date}); + assert.equal(parsed.toISOString(), new Date('2019-03-27').toISOString(), 'expected parsed date'); + }); + + it('parses a xs:date string with Z at the end', function () { + var inputDate = '2019-03-27Z'; + var parsed = xmlHandler.parseValue(inputDate, {jsType: Date}); + assert.equal(parsed.toISOString(), new Date(inputDate).toISOString(), 'expected parsed date'); + }); + + it('parses a xs:date string without tz', function () { + var inputDate = '2019-03-27'; + var parsed = xmlHandler.parseValue(inputDate, {jsType: Date}); + assert.equal(parsed.toISOString(), new Date(inputDate).toISOString(), 'expected parsed date'); + }); + + it('parses a xs:dateTime string with tz', function () { + var inputDate = '2019-03-27T01:01:01-03:00'; + var parsed = xmlHandler.parseValue(inputDate, {jsType: Date}); + assert.equal(parsed.toISOString(), new Date(inputDate).toISOString(), 'expected parsed date'); + }); + + it('parses a xs:dateTime string without tz', function () { + var inputDate = '2019-03-27T01:01:01'; + var parsed = xmlHandler.parseValue(inputDate, {jsType: Date}); + assert.equal(parsed.toISOString(), new Date(inputDate).toISOString(), 'expected parsed date'); + }); + +}); From 8b9d4123ca3cc7b5c8150e7be80ee41c6a76ef3f Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 28 Mar 2019 13:19:11 -0700 Subject: [PATCH 64/89] chore: upgrade deps --- package.json | 34 +++++++++++++++++----------------- src/parser/xmlHandler.js | 14 ++++++++++---- test/server-options-test.js | 4 ++-- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 4347e0bb..97dc5012 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "dependencies": { "compress": "^0.99.0", - "debug": "^3.1.0", + "debug": "^4.1.1", "httpntlm": "^1.7.6", "lodash": "^4.13.1", "optional": "^0.1.3", @@ -15,10 +15,10 @@ "request": "^2.72.0", "sax": "^1.2", "selectn": "^1.0.20", - "strong-globalize": "^4.1.1", + "strong-globalize": "^4.1.3", "uuid": "^3.2.1", - "xml-crypto": "^0.10.1", - "xmlbuilder": "^9.0.4" + "xml-crypto": "^1.3.0", + "xmlbuilder": "^10.1.1" }, "optionalDependencies": { "strong-ursa": "^0.10.1" @@ -46,23 +46,23 @@ ], "license": "MIT", "devDependencies": { - "async": "^2.0.1", + "async": "^2.6.2", "babel-cli": "^6.9.0", "babel-preset-env": "^1.6.1", - "colors": "^1.1.2", - "coveralls": "^3.0.0", - "diff": "^3.4.0", - "doctoc": "^1.3.1", + "colors": "^1.3.3", + "coveralls": "^3.0.3", + "diff": "^4.0.1", + "doctoc": "^1.4.0", "duplexer": "^0.1.1", - "eslint": "^4.18.2", - "eslint-config-google": "^0.9.1", + "eslint": "^5.15.3", + "eslint-config-google": "^0.12.0", "glob": "^7.0.3", - "jshint": "^2.9.5", - "mocha": "^5.0.0", - "nyc": "^11.4.1", - "readable-stream": "^2.1.4", - "semver": "^5.1.0", + "jshint": "^2.10.2", + "mocha": "^5.2.0", + "nyc": "^13.3.0", + "readable-stream": "^3.2.0", + "semver": "^6.0.0", "should": "^13.2.1", - "timekeeper": "^2.0.0" + "timekeeper": "^2.2.0" } } diff --git a/src/parser/xmlHandler.js b/src/parser/xmlHandler.js index 9b305064..9ab8c812 100644 --- a/src/parser/xmlHandler.js +++ b/src/parser/xmlHandler.js @@ -13,7 +13,6 @@ var TypeDescriptor = descriptor.TypeDescriptor; var QName = require('./qname'); var helper = require('./helper'); var NamespaceContext = require('./nscontext'); -var Set = helper.Set; class XMLHandler { @@ -130,14 +129,18 @@ class XMLHandler { } if (xmlns && descriptor.qname.nsURI) { - element.attribute(xmlns, descriptor.qname.nsURI); + if (typeof element.attribute === 'function') { + element.attribute(xmlns, descriptor.qname.nsURI); + } } if (val == null) { if (descriptor.isNillable) { // Set xsi:nil = true declareNamespace(nsContext, element, 'xsi', helper.namespaces.xsi); - element.attribute('xsi:nil', true); + if (typeof element.attribute === 'function') { + element.attribute('xsi:nil', true); + } } } @@ -812,7 +815,10 @@ function declareNamespace(nsContext, node, prefix, nsURI) { if (!mapping) { return false; } else if (node) { - node.attribute('xmlns:' + mapping.prefix, mapping.uri); + if (typeof node.attribute === 'function') { + // Some types of node such as XMLDummy does not allow attribute + node.attribute('xmlns:' + mapping.prefix, mapping.uri); + } return mapping; } return mapping; diff --git a/test/server-options-test.js b/test/server-options-test.js index 689ca77d..d1bf3c1d 100644 --- a/test/server-options-test.js +++ b/test/server-options-test.js @@ -124,7 +124,7 @@ describe('SOAP Server with Options', function() { // console.log(test.baseUrl); request(test.baseUrl, function(err, res, body) { assert.ok(!err); - console.log(body); + // console.log(body); done(); }); }); @@ -150,7 +150,7 @@ describe('SOAP Server with Options', function() { } request(test.baseUrl, function(err, res, body) { assert.ok(!err); - console.log(body); + // console.log(body); done(); }); }); From 1c7799cdb7d1e2debf879a9c495e6c3f3d22e7ea Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 28 Mar 2019 13:19:37 -0700 Subject: [PATCH 65/89] 1.18.0 * chore: upgrade deps (Raymond Feng) * Tests for parseValue with xsd date dateTime (arthmoeros) * Fix for xs:date with tz format (arthmoeros) --- CHANGES.md | 10 ++++++++++ package.json | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 55cf7fa0..e9f949c0 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,13 @@ +2019-03-28, Version 1.18.0 +========================== + + * chore: upgrade deps (Raymond Feng) + + * Tests for parseValue with xsd date dateTime (arthmoeros) + + * Fix for xs:date with tz format (arthmoeros) + + 2019-02-21, Version 1.17.0 ========================== diff --git a/package.json b/package.json index 97dc5012..e9938631 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.17.0", + "version": "1.18.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From 48fa45efd13b24d587acc562e6c8bf8248cda1e8 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 29 Apr 2019 12:49:48 -0700 Subject: [PATCH 66/89] Upgrade dependencies --- package.json | 10 +++++----- test/security/WSSecurityCert.js | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index e9938631..a5196b46 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,11 @@ "selectn": "^1.0.20", "strong-globalize": "^4.1.3", "uuid": "^3.2.1", - "xml-crypto": "^1.3.0", + "xml-crypto": "^1.4.0", "xmlbuilder": "^10.1.1" }, "optionalDependencies": { - "strong-ursa": "^0.10.1" + "strong-ursa": "^0.11.0" }, "repository": { "type": "git", @@ -54,13 +54,13 @@ "diff": "^4.0.1", "doctoc": "^1.4.0", "duplexer": "^0.1.1", - "eslint": "^5.15.3", + "eslint": "^5.16.0", "eslint-config-google": "^0.12.0", "glob": "^7.0.3", "jshint": "^2.10.2", "mocha": "^5.2.0", - "nyc": "^13.3.0", - "readable-stream": "^3.2.0", + "nyc": "^14.0.0", + "readable-stream": "^3.3.0", "semver": "^6.0.0", "should": "^13.2.1", "timekeeper": "^2.2.0" diff --git a/test/security/WSSecurityCert.js b/test/security/WSSecurityCert.js index 958c52cd..601b207b 100644 --- a/test/security/WSSecurityCert.js +++ b/test/security/WSSecurityCert.js @@ -83,7 +83,7 @@ describe('WSSecurityCert', function() { xml.should.containEql('' + instance.expires); xml.should.containEql(''); - xml.should.containEql(''); + xml.should.containEql(''); From e0a1eb075095f8a3385e254bedb0d070a93260ae Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 29 Apr 2019 12:50:33 -0700 Subject: [PATCH 67/89] 1.19.0 * Upgrade dependencies (Raymond Feng) --- CHANGES.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index e9f949c0..08ede369 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +2019-04-29, Version 1.19.0 +========================== + + * Upgrade dependencies (Raymond Feng) + + 2019-03-28, Version 1.18.0 ========================== diff --git a/package.json b/package.json index a5196b46..2ba46c2c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.18.0", + "version": "1.19.0", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From b58c801bf0272922238d731a5078d647c6af12aa Mon Sep 17 00:00:00 2001 From: Rijnhard Hessel Date: Wed, 20 Mar 2019 08:37:12 +0200 Subject: [PATCH 68/89] Add promise based stubs for testing --- README.md | 4 ++++ soap-stub.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/README.md b/README.md index 35a8d054..ca375eb7 100644 --- a/README.md +++ b/README.md @@ -892,6 +892,10 @@ var clientStub = { clientStub.SomeOperation.respondWithError = soapStub.createRespondingStub({error: 'error'}); clientStub.SomeOperation.respondWithSuccess = soapStub.createRespondingStub({success: 'success'}); +// or if you are using promises +clientStub.SomeOperation.respondWithError = soapStub.createRespondingStubAsync({error: 'error'}); +clientStub.SomeOperation.respondWithSuccess = soapStub.createRespondingStubAsync({success: 'success'}); + soapStub.registerClient('my client alias', urlMyApplicationWillUseWithCreateClient, clientStub); diff --git a/soap-stub.js b/soap-stub.js index 7635ff57..c18845bf 100644 --- a/soap-stub.js +++ b/soap-stub.js @@ -21,7 +21,9 @@ var clientStubs = {}; module.exports = { createClient: createClient, createErroringStub: createErroringStub, + createErroringStubAsync: createErroringStubAsync, createRespondingStub: createRespondingStub, + createRespondingStubAsync: createRespondingStubAsync, errOnCreateClient: false, getStub: getStub, registerClient: registerClient, @@ -82,6 +84,30 @@ function createErroringStub(err) { }; } +/** + * Returns a method that rejects all promises given to the method it is attached + * to with the given error. + * + *
+ * myClientStub.someMethod.errorOnCall = createErroringStubAsync(error);
+ *
+ * // elsewhere
+ *
+ * myClientStub.someMethod.errorOnCall();
+ * 
+ * + * @param {?} object anything + * @return {Function} + */ +function createErroringStubAsync(err) { + return function() { + this.args.forEach(function(argSet) { + setTimeout(argSet[1].bind(null, err)); + }); + this.rejects(err); + }; +} + /** * Returns a method that calls all callbacks given to the method it is attached * to with the given response. @@ -106,6 +132,30 @@ function createRespondingStub(object) { }; } +/** + * Returns a method that resolves all promises given to the method it is attached + * to with the given response. + * + *
+ * myClientStub.someMethod.respondWithError = createRespondingStubAsync(errorResponse);
+ *
+ * // elsewhere
+ *
+ * myClientStub.someMethod.respondWithError();
+ * 
+ * + * @param {?} object anything + * @return {Function} + */ +function createRespondingStubAsync(object) { + return function() { + this.args.forEach(function(argSet) { + setTimeout(argSet[1].bind(null, null, object)); + }); + this.resolves(object); + }; +} + /** * Registers a stubbed client with soap-stub. urlToWsdl is the path you will use * in your app. From f8c559618251c39035b0c1c93d8e4b63c518ca8c Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Tue, 30 Apr 2019 10:13:57 -0700 Subject: [PATCH 69/89] Replace deprecated Buffer api --- src/strip-bom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strip-bom.js b/src/strip-bom.js index fb049c1a..ff8c7506 100644 --- a/src/strip-bom.js +++ b/src/strip-bom.js @@ -11,7 +11,7 @@ function stripBom(str){ if (typeof str !== 'string') { throw new Error('Invalid input, only string allowed'); } - var chunk = new Buffer(str); + var chunk = Buffer.from(str); var transformed; var value = str; if (chunk[0] === 0xFE && chunk[1] === 0XFF) { From 0aa3ec0e468b718da1bfc2a76748e4bb3eeb32bb Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 2 May 2019 10:12:07 -0700 Subject: [PATCH 70/89] Fix xml date/time/dateTime conversion --- package.json | 2 +- src/parser/xmlHandler.js | 39 +++++++++++++++++ .../common.xsd | 28 +++++++++++++ .../name.xsd | 21 ++++++++++ .../request.json | 17 ++++++++ .../request.xml | 17 ++++++++ .../response.json | 7 ++++ .../response.xml | 12 ++++++ .../soap.wsdl | 42 +++++++++++++++++++ test/xs-date-format-test.js | 36 ++++++++++++++++ 10 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/common.xsd create mode 100644 test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/name.xsd create mode 100644 test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/request.json create mode 100644 test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/request.xml create mode 100644 test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/response.json create mode 100644 test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/response.xml create mode 100644 test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/soap.wsdl diff --git a/package.json b/package.json index 2ba46c2c..2ef72c18 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "toc": "doctoc Readme.md --github --maxlevel 3", "_pretest": "jshint index.js lib test", "coveralls": "nyc report --reporter=text-lcov | coveralls -v", - "test": "nyc mocha --exit --timeout 60000 test/*-test.js test/security/*.js", + "test": "nyc --reporter=html mocha --exit --timeout 60000 test/*-test.js test/security/*.js", "citest": "npm test", "postcitest": "npm run coveralls", "pretest": "babel src -d lib", diff --git a/src/parser/xmlHandler.js b/src/parser/xmlHandler.js index 9ab8c812..bbdb604a 100644 --- a/src/parser/xmlHandler.js +++ b/src/parser/xmlHandler.js @@ -37,6 +37,7 @@ class XMLHandler { var name; let nameSpaceContextCreated = false; if (descriptor instanceof AttributeDescriptor) { + val = toXmlDateOrTime(descriptor, val); name = descriptor.qname.name; if (descriptor.form === 'unqualified') { node.attribute(name, val); @@ -110,6 +111,7 @@ class XMLHandler { && typeof val[this.options.xmlKey] !== "undefined") { val = val[this.options.xmlKey]; element = node.element(elementName); + val = toXmlDateOrTime(descriptor, val); element.raw(val); } else { // Enforce the type restrictions if configured for such @@ -125,6 +127,7 @@ class XMLHandler { } } } + val = toXmlDateOrTime(descriptor, val); element = isSimple ? node.element(elementName, val) : node.element(elementName); } @@ -182,6 +185,7 @@ class XMLHandler { //val is not an object - simple or date types if (val != null && ( typeof val !== 'object' || val instanceof Date)) { // for adding a field value nsContext.popContext() shouldnt be called + val = toXmlDateOrTime(descriptor, val); element.text(val); //add $attributes. Attribute can be an attribute defined in XSD or an xsi:type. //e.g of xsi:type some name @@ -274,6 +278,7 @@ class XMLHandler { mapObject(node, nsContext, descriptor, val, attrs) { if (val == null) return node; if (typeof val !== 'object' || (val instanceof Date)) { + val = toXmlDateOrTime(descriptor, val); node.text(val); return node; } @@ -849,6 +854,40 @@ function parseValue(text, descriptor) { return value; } +function toXmlDate(date) { + date = new Date(date); + var isoStr = date.toISOString(); + return isoStr.split('T')[0] + 'Z'; +} + +function toXmlTime(date) { + date = new Date(date); + var isoStr = date.toISOString(); + return isoStr.split('T')[1]; +} + +function toXmlDateTime(date) { + date = new Date(date); + var isoStr = date.toISOString(); + return isoStr; +} + +function toXmlDateOrTime(descriptor, val) { + if (!descriptor || !descriptor.type) return val; + if (descriptor.type.name === 'date') { + val = toXmlDate(val); + } else if (descriptor.type.name === 'time') { + val = toXmlTime(val); + } else if (descriptor.type.name === 'dateTime') { + val = toXmlDateTime(val); + } + return val; +} + module.exports = XMLHandler; + // Exported function for testing module.exports.parseValue = parseValue; +module.exports.toXmlDate = toXmlDate; +module.exports.toXmlTime = toXmlTime; +module.exports.toXmlDateTime = toXmlDateTime; diff --git a/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/common.xsd b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/common.xsd new file mode 100644 index 00000000..cb5a4e17 --- /dev/null +++ b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/common.xsd @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/name.xsd b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/name.xsd new file mode 100644 index 00000000..85585da2 --- /dev/null +++ b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/name.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/request.json b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/request.json new file mode 100644 index 00000000..269c7144 --- /dev/null +++ b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/request.json @@ -0,0 +1,17 @@ +{ + "DummyRequest": { + "DummyFilter": { + "DummyTimeFilter": "2018-09-01T10:20:09Z", + "DummyDateFilter": "2018-09-01T10:20:09Z" + }, + "DummyList": { + "DummyElement": { + "$attributes": { + "created": "2018-09-01T10:20:09Z", + "updated": "2018-09-01T10:20:09Z" + }, + "$value": "123" + } + } + } +} diff --git a/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/request.xml b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/request.xml new file mode 100644 index 00000000..a85781e0 --- /dev/null +++ b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/request.xml @@ -0,0 +1,17 @@ + + + + + + + 2018-09-01Z + 10:20:09.000Z + + + 123 + + + + \ No newline at end of file diff --git a/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/response.json b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/response.json new file mode 100644 index 00000000..ebdf90ab --- /dev/null +++ b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/response.json @@ -0,0 +1,7 @@ +{ + "DummyResult": { + "DummyList": { + "DummyElement": null + } + } +} diff --git a/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/response.xml b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/response.xml new file mode 100644 index 00000000..5417014e --- /dev/null +++ b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/response.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/soap.wsdl b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/soap.wsdl new file mode 100644 index 00000000..bf5d27ce --- /dev/null +++ b/test/request-response-samples/Dummy__should_handle_xml_date_time_dateTime/soap.wsdl @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/xs-date-format-test.js b/test/xs-date-format-test.js index 61c21056..24a86c8b 100644 --- a/test/xs-date-format-test.js +++ b/test/xs-date-format-test.js @@ -39,5 +39,41 @@ describe('xs-date-format-tests', function() { var parsed = xmlHandler.parseValue(inputDate, {jsType: Date}); assert.equal(parsed.toISOString(), new Date(inputDate).toISOString(), 'expected parsed date'); }); + + describe('xml date/time/dateTime', function () { + // 2019-03-27T04:01:01.000Z + var inputDate = new Date('2019-03-27T01:01:01-03:00'); + var inputDateStr = new Date('2019-03-27T01:01:01-03:00'); + + it('converts date to xml date', function () { + var xmlDate = xmlHandler.toXmlDate(inputDate); + assert.equal(xmlDate, '2019-03-27Z'); + }); + + it('converts date to xml time', function () { + var xmlTime = xmlHandler.toXmlTime(inputDate); + assert.equal(xmlTime, '04:01:01.000Z'); + }); + + it('converts date to xml dateTime', function () { + var xmlDateTime = xmlHandler.toXmlDateTime(inputDate); + assert.equal(xmlDateTime, '2019-03-27T04:01:01.000Z'); + }); + + it('converts string to xml date', function () { + var xmlDate = xmlHandler.toXmlDate(inputDateStr); + assert.equal(xmlDate, '2019-03-27Z'); + }); + + it('converts string to xml time', function () { + var xmlTime = xmlHandler.toXmlTime(inputDateStr); + assert.equal(xmlTime, '04:01:01.000Z'); + }); + + it('converts string to xml dateTime', function () { + var xmlDateTime = xmlHandler.toXmlDateTime(inputDateStr); + assert.equal(xmlDateTime, '2019-03-27T04:01:01.000Z'); + }); + }); }); From f15f5f0c0a0ec5e4d5200f6a922ad297f6e1c95a Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 2 May 2019 10:14:35 -0700 Subject: [PATCH 71/89] Use Buffer.from to replace depreated new Buffer --- src/parser/helper.js | 2 +- src/security/BasicAuthSecurity.js | 2 +- src/utils.js | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/parser/helper.js b/src/parser/helper.js index 5eea55b6..4387440b 100644 --- a/src/parser/helper.js +++ b/src/parser/helper.js @@ -97,7 +97,7 @@ var crypto = require('crypto'); exports.passwordDigest = function passwordDigest(nonce, created, password) { // digest = base64 ( sha1 ( nonce + created + password ) ) var pwHash = crypto.createHash('sha1'); - var rawNonce = new Buffer(nonce || '', 'base64').toString('binary'); + var rawNonce = Buffer.from(nonce || '', 'base64').toString('binary'); pwHash.update(rawNonce + created + password); return pwHash.digest('base64'); }; diff --git a/src/security/BasicAuthSecurity.js b/src/security/BasicAuthSecurity.js index 50e70d16..a265fd02 100644 --- a/src/security/BasicAuthSecurity.js +++ b/src/security/BasicAuthSecurity.js @@ -11,7 +11,7 @@ class BasicAuthSecurity extends Security { } addHttpHeaders(headers) { - var cred = new Buffer((this.username + ':' + this.password) || '') + var cred = Buffer.from((this.username + ':' + this.password) || '') .toString('base64'); headers.Authorization = 'Basic ' + cred; }; diff --git a/src/utils.js b/src/utils.js index cf437299..a7dd4f35 100644 --- a/src/utils.js +++ b/src/utils.js @@ -4,7 +4,7 @@ var crypto = require('crypto'); exports.passwordDigestOriginal = function passwordDigest(nonce, created, password) { // digest = base64 ( sha1 ( nonce + created + password ) ) var pwHash = crypto.createHash('sha1'); - var rawNonce = new Buffer(nonce || '', 'base64').toString('binary'); + var rawNonce = Buffer.from(nonce || '', 'base64').toString('binary'); pwHash.update(rawNonce + created + password); return pwHash.digest('base64'); }; @@ -12,11 +12,11 @@ exports.passwordDigestOriginal = function passwordDigest(nonce, created, passwor exports.passwordDigest = function (nonce, created, password) { // digest = base64 ( sha1 ( nonce + created + password ) ) var pwHash = crypto.createHash('sha1'); - var rawNonce = new Buffer(nonce || '', 'base64'); + var rawNonce = Buffer.from(nonce || '', 'base64'); pwHash.update(Buffer.concat([ rawNonce, - new Buffer(created), - new Buffer(password) + Buffer.from(created), + Buffer.from(password) ])); return pwHash.digest('base64'); }; From 74a83816caec1dea4eaaa539d9a3ce0626c1313a Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 2 May 2019 10:14:56 -0700 Subject: [PATCH 72/89] 1.19.1 * Use Buffer.from to replace depreated new Buffer (Raymond Feng) * Fix xml date/time/dateTime conversion (Raymond Feng) * Replace deprecated Buffer api (Raymond Feng) * Add promise based stubs for testing (Rijnhard Hessel) --- CHANGES.md | 12 ++++++++++++ package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 08ede369..781fe6a8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,15 @@ +2019-05-02, Version 1.19.1 +========================== + + * Use Buffer.from to replace depreated new Buffer (Raymond Feng) + + * Fix xml date/time/dateTime conversion (Raymond Feng) + + * Replace deprecated Buffer api (Raymond Feng) + + * Add promise based stubs for testing (Rijnhard Hessel) + + 2019-04-29, Version 1.19.0 ========================== diff --git a/package.json b/package.json index 2ef72c18..6f978f8a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.19.0", + "version": "1.19.1", "description": "A minimal node SOAP client", "engines": { "node": ">=6.0" From 72f018c5a0d098ba2e021d61464dbbf1268a3da4 Mon Sep 17 00:00:00 2001 From: Stefano Marotta Date: Wed, 8 May 2019 18:45:14 -0300 Subject: [PATCH 73/89] Add support for 1/0 booleans --- src/parser/xmlHandler.js | 2 +- test/xs-boolean-format-test.js | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 test/xs-boolean-format-test.js diff --git a/src/parser/xmlHandler.js b/src/parser/xmlHandler.js index bbdb604a..2fe8f5f0 100644 --- a/src/parser/xmlHandler.js +++ b/src/parser/xmlHandler.js @@ -843,7 +843,7 @@ function parseValue(text, descriptor) { } value = new Date(dateText); } else if (jsType === Boolean) { - if (text === 'true') { + if (text === 'true' || text === '1') { value = true; } else { value = false; diff --git a/test/xs-boolean-format-test.js b/test/xs-boolean-format-test.js new file mode 100644 index 00000000..42e8621c --- /dev/null +++ b/test/xs-boolean-format-test.js @@ -0,0 +1,31 @@ +"use strict"; +var xmlHandler = require('./../src/parser/xmlHandler'); +var assert = require('assert'); + +describe('xs-boolean-format-tests', function() { + + it('parses a xs:boolean string with literal \'true\'', function () { + var inputBoolean = 'true'; + var parsed = xmlHandler.parseValue(inputBoolean, {jsType: Boolean}); + assert.equal(parsed, true, 'expected parsed boolean'); + }); + + it('parses a xs:boolean string with literal \'false\'', function () { + var inputBoolean = 'false'; + var parsed = xmlHandler.parseValue(inputBoolean, {jsType: Boolean}); + assert.equal(parsed, false, 'expected parsed boolean'); + }); + + it('parses a xs:boolean string with literal \'1\'', function () { + var inputBoolean = '1'; + var parsed = xmlHandler.parseValue(inputBoolean, {jsType: Boolean}); + assert.equal(parsed, true, 'expected parsed boolean'); + }); + + it('parses a xs:boolean string with literal \'0\'', function () { + var inputBoolean = '0'; + var parsed = xmlHandler.parseValue(inputBoolean, {jsType: Boolean}); + assert.equal(parsed, false, 'expected parsed boolean'); + }); + +}); From e11e1a703c70b880094e579e3ff0084cd5bda0b6 Mon Sep 17 00:00:00 2001 From: Agnes Lin Date: Thu, 9 May 2019 08:55:14 -0400 Subject: [PATCH 74/89] chore: update copyrights years --- example/json2xml.js | 5 +++++ example/ntlm.js | 4 ++++ example/stockquote.js | 5 +++++ example/weather.js | 4 ++++ example/xml.js | 5 +++++ example/xml2json.js | 5 +++++ example/xsds.js | 5 +++++ index.js | 5 +++++ package.json | 3 ++- soap-stub.js | 5 +++++ src/base.js | 5 +++++ src/client.js | 5 +++++ src/globalize.js | 5 +++++ src/http.js | 5 +++++ src/parser/element.js | 5 +++++ src/parser/helper.js | 5 +++++ src/parser/index.js | 5 +++++ src/parser/nscontext.js | 5 +++++ src/parser/qname.js | 5 +++++ src/parser/soap/body.js | 5 +++++ src/parser/soap/fault.js | 5 +++++ src/parser/soap/header.js | 5 +++++ src/parser/soap/headerFault.js | 5 +++++ src/parser/soap/soapElement.js | 5 +++++ src/parser/soap12/body.js | 5 +++++ src/parser/soap12/fault.js | 5 +++++ src/parser/soap12/header.js | 5 +++++ src/parser/soap12/headerFault.js | 5 +++++ src/parser/soap12/soapElement.js | 5 +++++ src/parser/typeRegistry.js | 5 +++++ src/parser/wsdl.js | 5 +++++ src/parser/wsdl/binding.js | 5 +++++ src/parser/wsdl/definitions.js | 5 +++++ src/parser/wsdl/documentation.js | 5 +++++ src/parser/wsdl/fault.js | 5 +++++ src/parser/wsdl/import.js | 5 +++++ src/parser/wsdl/input.js | 5 +++++ src/parser/wsdl/message.js | 5 +++++ src/parser/wsdl/operation.js | 5 +++++ src/parser/wsdl/output.js | 5 +++++ src/parser/wsdl/parameter.js | 5 +++++ src/parser/wsdl/part.js | 5 +++++ src/parser/wsdl/port.js | 5 +++++ src/parser/wsdl/portType.js | 5 +++++ src/parser/wsdl/service.js | 5 +++++ src/parser/wsdl/types.js | 5 +++++ src/parser/wsdl/wsdlElement.js | 5 +++++ src/parser/xmlHandler.js | 5 +++++ src/parser/xsd.js | 5 +++++ src/parser/xsd/all.js | 5 +++++ src/parser/xsd/annotation.js | 5 +++++ src/parser/xsd/any.js | 5 +++++ src/parser/xsd/anyAttribute.js | 5 +++++ src/parser/xsd/attribute.js | 5 +++++ src/parser/xsd/attributeGroup.js | 5 +++++ src/parser/xsd/choice.js | 5 +++++ src/parser/xsd/complexContent.js | 5 +++++ src/parser/xsd/complexType.js | 5 +++++ src/parser/xsd/descriptor.js | 5 +++++ src/parser/xsd/documentation.js | 5 +++++ src/parser/xsd/element.js | 5 +++++ src/parser/xsd/extension.js | 5 +++++ src/parser/xsd/group.js | 5 +++++ src/parser/xsd/import.js | 5 +++++ src/parser/xsd/include.js | 5 +++++ src/parser/xsd/key.js | 5 +++++ src/parser/xsd/keybase.js | 5 +++++ src/parser/xsd/keyref.js | 5 +++++ src/parser/xsd/list.js | 5 +++++ src/parser/xsd/restriction.js | 5 +++++ src/parser/xsd/schema.js | 5 +++++ src/parser/xsd/sequence.js | 5 +++++ src/parser/xsd/simpleContent.js | 5 +++++ src/parser/xsd/simpleType.js | 5 +++++ src/parser/xsd/union.js | 5 +++++ src/parser/xsd/unique.js | 5 +++++ src/parser/xsd/xsdElement.js | 5 +++++ src/security/BasicAuthSecurity.js | 5 +++++ src/security/BearerSecurity.js | 5 +++++ src/security/ClientSSLSecurity.js | 5 +++++ src/security/ClientSSLSecurityPFX.js | 5 +++++ src/security/CookieSecurity.js | 5 +++++ src/security/NTLMSecurity.js | 5 +++++ src/security/WSSecurity.js | 5 +++++ src/security/WSSecurityCert.js | 5 +++++ src/security/index.js | 5 +++++ src/security/security.js | 5 +++++ src/server.js | 5 +++++ src/soap.js | 5 +++++ src/soapModel.js | 5 +++++ src/strip-bom.js | 5 +++++ src/utils.js | 5 +++++ test/_socketStream.js | 5 +++++ test/client-customHttp-test.js | 5 +++++ test/client-customHttp-xsdinclude-test.js | 5 +++++ test/client-restrictions-test.js | 5 +++++ test/client-test.js | 5 +++++ test/doc-lit-part-err-returned-test.js | 5 +++++ test/nillable-test.js | 5 +++++ test/qname/qname-test.js | 5 +++++ test/request-response-samples-test.js | 5 +++++ test/security/BasicAuthSecurity.js | 5 +++++ test/security/BearerSecurity.js | 5 +++++ test/security/ClientSSLSecurity.js | 5 +++++ test/security/ClientSSLSecurityPFX.js | 5 +++++ test/security/CookieSecurity.js | 5 +++++ test/security/WSSecurity.js | 5 +++++ test/security/WSSecurityCert.js | 5 +++++ test/server-client-document-test.js | 5 +++++ test/server-client-rpc-test.js | 5 +++++ test/server-options-test.js | 5 +++++ test/server-test.js | 5 +++++ test/ssl-test.js | 5 +++++ test/wsdl-load-from-memory-test.js | 5 +++++ test/wsdl-parse-test.js | 5 +++++ test/wsdl-test.js | 5 +++++ test/wsdl/typeref/request.xml.js | 5 +++++ test/xs-date-format-test.js | 5 +++++ 118 files changed, 585 insertions(+), 1 deletion(-) diff --git a/example/json2xml.js b/example/json2xml.js index a0cb104c..d31c1f58 100644 --- a/example/json2xml.js +++ b/example/json2xml.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + var soap = require('..').soap; var XMLHandler = soap.XMLHandler; diff --git a/example/ntlm.js b/example/ntlm.js index 9b8ee704..f8fb4de1 100644 --- a/example/ntlm.js +++ b/example/ntlm.js @@ -1,3 +1,7 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT "use strict"; diff --git a/example/stockquote.js b/example/stockquote.js index 18ead93a..de851045 100644 --- a/example/stockquote.js +++ b/example/stockquote.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var soap = require('..').soap; diff --git a/example/weather.js b/example/weather.js index 8954e90b..914c1f32 100644 --- a/example/weather.js +++ b/example/weather.js @@ -1,3 +1,7 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT "use strict"; diff --git a/example/xml.js b/example/xml.js index 3180fa4d..cbcf806f 100644 --- a/example/xml.js +++ b/example/xml.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + var soap = require('..').soap; var XMLHandler = soap.XMLHandler; diff --git a/example/xml2json.js b/example/xml2json.js index 2f8e1383..cf308cb3 100644 --- a/example/xml2json.js +++ b/example/xml2json.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + var soap = require('..').soap; var XMLHandler = soap.XMLHandler; diff --git a/example/xsds.js b/example/xsds.js index fe22d203..191aec3e 100644 --- a/example/xsds.js +++ b/example/xsds.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + var soap = require('..').soap; var WSDL = soap.WSDL; var path = require('path'); diff --git a/index.js b/index.js index fa884c75..701ff009 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2011,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var base = './lib/'; diff --git a/package.json b/package.json index 6f978f8a..2d574e1d 100644 --- a/package.json +++ b/package.json @@ -64,5 +64,6 @@ "semver": "^6.0.0", "should": "^13.2.1", "timekeeper": "^2.2.0" - } + }, + "author": "IBM Corp." } diff --git a/soap-stub.js b/soap-stub.js index c18845bf..b78d7851 100644 --- a/soap-stub.js +++ b/soap-stub.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2015,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + var _ = require('lodash'); var aliasedClientStubs = {}; diff --git a/src/base.js b/src/base.js index bd16a0e3..419998e7 100644 --- a/src/base.js +++ b/src/base.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var EventEmitter = require('events').EventEmitter; diff --git a/src/client.js b/src/client.js index 658150be..8b895bc4 100644 --- a/src/client.js +++ b/src/client.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('./globalize'); diff --git a/src/globalize.js b/src/globalize.js index 07b4b2df..c7f8425c 100644 --- a/src/globalize.js +++ b/src/globalize.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var path = require('path'); diff --git a/src/http.js b/src/http.js index 62cf1aaa..071f8c19 100644 --- a/src/http.js +++ b/src/http.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var url = require('url'); diff --git a/src/parser/element.js b/src/parser/element.js index ab7ddfdf..6e472b0b 100644 --- a/src/parser/element.js +++ b/src/parser/element.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('../globalize'); diff --git a/src/parser/helper.js b/src/parser/helper.js index 4387440b..3316855d 100644 --- a/src/parser/helper.js +++ b/src/parser/helper.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; // Primitive data types diff --git a/src/parser/index.js b/src/parser/index.js index 199ad3c1..7a1b99cf 100644 --- a/src/parser/index.js +++ b/src/parser/index.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + exports.QName = require('./qname'); exports.NamespaceContext = require('./nscontext'); exports.WSDL = require('./wsdl'); diff --git a/src/parser/nscontext.js b/src/parser/nscontext.js index 6a82c3ba..305f2f4a 100644 --- a/src/parser/nscontext.js +++ b/src/parser/nscontext.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; /** diff --git a/src/parser/qname.js b/src/parser/qname.js index 4918206e..72583da9 100644 --- a/src/parser/qname.js +++ b/src/parser/qname.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('../globalize'); diff --git a/src/parser/soap/body.js b/src/parser/soap/body.js index ab032566..19dabd9e 100644 --- a/src/parser/soap/body.js +++ b/src/parser/soap/body.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var SOAPElement = require('./soapElement'); diff --git a/src/parser/soap/fault.js b/src/parser/soap/fault.js index 7e2d841b..a621f03d 100644 --- a/src/parser/soap/fault.js +++ b/src/parser/soap/fault.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var SOAPElement = require('./soapElement'); diff --git a/src/parser/soap/header.js b/src/parser/soap/header.js index f0058deb..16371b1a 100644 --- a/src/parser/soap/header.js +++ b/src/parser/soap/header.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var SOAPElement = require('./soapElement'); diff --git a/src/parser/soap/headerFault.js b/src/parser/soap/headerFault.js index eb9c2ed8..a23644d6 100644 --- a/src/parser/soap/headerFault.js +++ b/src/parser/soap/headerFault.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var SOAPElement = require('./soapElement'); diff --git a/src/parser/soap/soapElement.js b/src/parser/soap/soapElement.js index 411b14ea..830875f1 100644 --- a/src/parser/soap/soapElement.js +++ b/src/parser/soap/soapElement.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var Element = require('../element'); diff --git a/src/parser/soap12/body.js b/src/parser/soap12/body.js index 85ffb6d5..dc98ddd8 100644 --- a/src/parser/soap12/body.js +++ b/src/parser/soap12/body.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var SOAPElement = require('./soapElement'); diff --git a/src/parser/soap12/fault.js b/src/parser/soap12/fault.js index 91529b8a..07e4dbd3 100644 --- a/src/parser/soap12/fault.js +++ b/src/parser/soap12/fault.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var SOAPElement = require('./soapElement'); diff --git a/src/parser/soap12/header.js b/src/parser/soap12/header.js index 2564e1d4..50be14a1 100644 --- a/src/parser/soap12/header.js +++ b/src/parser/soap12/header.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var SOAPElement = require('./soapElement'); diff --git a/src/parser/soap12/headerFault.js b/src/parser/soap12/headerFault.js index e302a107..d0b2c00c 100644 --- a/src/parser/soap12/headerFault.js +++ b/src/parser/soap12/headerFault.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var SOAPElement = require('./soapElement'); diff --git a/src/parser/soap12/soapElement.js b/src/parser/soap12/soapElement.js index fca3b85a..63c35565 100644 --- a/src/parser/soap12/soapElement.js +++ b/src/parser/soap12/soapElement.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var Element = require('../element'); diff --git a/src/parser/typeRegistry.js b/src/parser/typeRegistry.js index 01ab07ba..d8d3ae9d 100644 --- a/src/parser/typeRegistry.js +++ b/src/parser/typeRegistry.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; /** diff --git a/src/parser/wsdl.js b/src/parser/wsdl.js index 8daaebb0..3ff2d454 100644 --- a/src/parser/wsdl.js +++ b/src/parser/wsdl.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('../globalize'); diff --git a/src/parser/wsdl/binding.js b/src/parser/wsdl/binding.js index cb7014d5..935c82da 100644 --- a/src/parser/wsdl/binding.js +++ b/src/parser/wsdl/binding.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var WSDLElement = require('./wsdlElement'); diff --git a/src/parser/wsdl/definitions.js b/src/parser/wsdl/definitions.js index 57858b66..24dc7595 100644 --- a/src/parser/wsdl/definitions.js +++ b/src/parser/wsdl/definitions.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var _ = require('lodash'); diff --git a/src/parser/wsdl/documentation.js b/src/parser/wsdl/documentation.js index 1335882b..39580424 100644 --- a/src/parser/wsdl/documentation.js +++ b/src/parser/wsdl/documentation.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var WSDLElement = require('./wsdlElement'); diff --git a/src/parser/wsdl/fault.js b/src/parser/wsdl/fault.js index f49ab012..009b75d0 100644 --- a/src/parser/wsdl/fault.js +++ b/src/parser/wsdl/fault.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var Parameter = require('./parameter'); diff --git a/src/parser/wsdl/import.js b/src/parser/wsdl/import.js index 05ee98ba..47cde02b 100644 --- a/src/parser/wsdl/import.js +++ b/src/parser/wsdl/import.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var WSDLElement = require('./wsdlElement'); diff --git a/src/parser/wsdl/input.js b/src/parser/wsdl/input.js index 29a60552..cef83c0b 100644 --- a/src/parser/wsdl/input.js +++ b/src/parser/wsdl/input.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var Parameter = require('./parameter'); diff --git a/src/parser/wsdl/message.js b/src/parser/wsdl/message.js index 457e53ae..7d960009 100644 --- a/src/parser/wsdl/message.js +++ b/src/parser/wsdl/message.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var WSDLElement = require('./wsdlElement'); diff --git a/src/parser/wsdl/operation.js b/src/parser/wsdl/operation.js index 3d435b03..0a5796eb 100644 --- a/src/parser/wsdl/operation.js +++ b/src/parser/wsdl/operation.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('../../globalize'); diff --git a/src/parser/wsdl/output.js b/src/parser/wsdl/output.js index 6ec56a63..d5c7cac0 100644 --- a/src/parser/wsdl/output.js +++ b/src/parser/wsdl/output.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var Parameter = require('./parameter'); diff --git a/src/parser/wsdl/parameter.js b/src/parser/wsdl/parameter.js index e2ff21ab..aae8b7df 100644 --- a/src/parser/wsdl/parameter.js +++ b/src/parser/wsdl/parameter.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var WSDLElement = require('./wsdlElement'); diff --git a/src/parser/wsdl/part.js b/src/parser/wsdl/part.js index 71f17734..01fd7838 100644 --- a/src/parser/wsdl/part.js +++ b/src/parser/wsdl/part.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var WSDLElement = require('./wsdlElement'); diff --git a/src/parser/wsdl/port.js b/src/parser/wsdl/port.js index 51d1db6b..02858055 100644 --- a/src/parser/wsdl/port.js +++ b/src/parser/wsdl/port.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var WSDLElement = require('./wsdlElement'); diff --git a/src/parser/wsdl/portType.js b/src/parser/wsdl/portType.js index 0caa434c..49b18a96 100644 --- a/src/parser/wsdl/portType.js +++ b/src/parser/wsdl/portType.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var WSDLElement = require('./wsdlElement'); diff --git a/src/parser/wsdl/service.js b/src/parser/wsdl/service.js index 70e0bea3..e20bc431 100644 --- a/src/parser/wsdl/service.js +++ b/src/parser/wsdl/service.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var WSDLElement = require('./wsdlElement'); diff --git a/src/parser/wsdl/types.js b/src/parser/wsdl/types.js index 2ee96811..fb2db3ad 100644 --- a/src/parser/wsdl/types.js +++ b/src/parser/wsdl/types.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var WSDLElement = require('./wsdlElement'); diff --git a/src/parser/wsdl/wsdlElement.js b/src/parser/wsdl/wsdlElement.js index dd45a3f0..585b34e3 100644 --- a/src/parser/wsdl/wsdlElement.js +++ b/src/parser/wsdl/wsdlElement.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var Element = require('../element'); diff --git a/src/parser/xmlHandler.js b/src/parser/xmlHandler.js index bbdb604a..58a1a74b 100644 --- a/src/parser/xmlHandler.js +++ b/src/parser/xmlHandler.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var xmlBuilder = require('xmlbuilder'); diff --git a/src/parser/xsd.js b/src/parser/xsd.js index 8fd2f028..49406e4c 100644 --- a/src/parser/xsd.js +++ b/src/parser/xsd.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var helper = require('./helper'); diff --git a/src/parser/xsd/all.js b/src/parser/xsd/all.js index 0c4d6c85..6904a132 100644 --- a/src/parser/xsd/all.js +++ b/src/parser/xsd/all.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/annotation.js b/src/parser/xsd/annotation.js index 7c9b59e6..a490bdac 100644 --- a/src/parser/xsd/annotation.js +++ b/src/parser/xsd/annotation.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/any.js b/src/parser/xsd/any.js index c4d172dd..73fbdb0e 100644 --- a/src/parser/xsd/any.js +++ b/src/parser/xsd/any.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/anyAttribute.js b/src/parser/xsd/anyAttribute.js index ba6195f0..801565c1 100644 --- a/src/parser/xsd/anyAttribute.js +++ b/src/parser/xsd/anyAttribute.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/attribute.js b/src/parser/xsd/attribute.js index bab9f81e..3e3543f3 100644 --- a/src/parser/xsd/attribute.js +++ b/src/parser/xsd/attribute.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/attributeGroup.js b/src/parser/xsd/attributeGroup.js index c5852993..c3596b89 100644 --- a/src/parser/xsd/attributeGroup.js +++ b/src/parser/xsd/attributeGroup.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/choice.js b/src/parser/xsd/choice.js index a702ef9c..07cd1517 100644 --- a/src/parser/xsd/choice.js +++ b/src/parser/xsd/choice.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/complexContent.js b/src/parser/xsd/complexContent.js index 83edb1c6..63e835c4 100644 --- a/src/parser/xsd/complexContent.js +++ b/src/parser/xsd/complexContent.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/complexType.js b/src/parser/xsd/complexType.js index 564ff7f0..02514b9e 100644 --- a/src/parser/xsd/complexType.js +++ b/src/parser/xsd/complexType.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/descriptor.js b/src/parser/xsd/descriptor.js index 45f37d0e..a898bfb5 100644 --- a/src/parser/xsd/descriptor.js +++ b/src/parser/xsd/descriptor.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var assert = require('assert'); diff --git a/src/parser/xsd/documentation.js b/src/parser/xsd/documentation.js index c4791b9e..8f17dcd8 100644 --- a/src/parser/xsd/documentation.js +++ b/src/parser/xsd/documentation.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/element.js b/src/parser/xsd/element.js index 347e03ad..8e645b35 100644 --- a/src/parser/xsd/element.js +++ b/src/parser/xsd/element.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/extension.js b/src/parser/xsd/extension.js index 3358a8fa..0b5f7857 100644 --- a/src/parser/xsd/extension.js +++ b/src/parser/xsd/extension.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/group.js b/src/parser/xsd/group.js index c22daba5..48d49618 100644 --- a/src/parser/xsd/group.js +++ b/src/parser/xsd/group.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/import.js b/src/parser/xsd/import.js index 36d83213..1c9ad7f4 100644 --- a/src/parser/xsd/import.js +++ b/src/parser/xsd/import.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/include.js b/src/parser/xsd/include.js index 2737518b..dd3d8af4 100644 --- a/src/parser/xsd/include.js +++ b/src/parser/xsd/include.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/key.js b/src/parser/xsd/key.js index 0185da65..ed583e73 100644 --- a/src/parser/xsd/key.js +++ b/src/parser/xsd/key.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var KeyBase = require('./keybase'); diff --git a/src/parser/xsd/keybase.js b/src/parser/xsd/keybase.js index 31c327c7..5b65beed 100644 --- a/src/parser/xsd/keybase.js +++ b/src/parser/xsd/keybase.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('../../globalize'); diff --git a/src/parser/xsd/keyref.js b/src/parser/xsd/keyref.js index 92b8132a..84a73905 100644 --- a/src/parser/xsd/keyref.js +++ b/src/parser/xsd/keyref.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var KeyBase = require('./keybase'); diff --git a/src/parser/xsd/list.js b/src/parser/xsd/list.js index f93dce05..86b90552 100644 --- a/src/parser/xsd/list.js +++ b/src/parser/xsd/list.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('../../globalize'); diff --git a/src/parser/xsd/restriction.js b/src/parser/xsd/restriction.js index 8ec3f222..5ce388e1 100644 --- a/src/parser/xsd/restriction.js +++ b/src/parser/xsd/restriction.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/schema.js b/src/parser/xsd/schema.js index 6e3f3c46..ea5e1dab 100644 --- a/src/parser/xsd/schema.js +++ b/src/parser/xsd/schema.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var _ = require('lodash'); diff --git a/src/parser/xsd/sequence.js b/src/parser/xsd/sequence.js index fa9dc1f5..bdd714c4 100644 --- a/src/parser/xsd/sequence.js +++ b/src/parser/xsd/sequence.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/simpleContent.js b/src/parser/xsd/simpleContent.js index e86d28e4..3fd141b5 100644 --- a/src/parser/xsd/simpleContent.js +++ b/src/parser/xsd/simpleContent.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/simpleType.js b/src/parser/xsd/simpleType.js index 6fb6d999..60fba387 100644 --- a/src/parser/xsd/simpleType.js +++ b/src/parser/xsd/simpleType.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/union.js b/src/parser/xsd/union.js index 31726564..63feb148 100644 --- a/src/parser/xsd/union.js +++ b/src/parser/xsd/union.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var XSDElement = require('./xsdElement'); diff --git a/src/parser/xsd/unique.js b/src/parser/xsd/unique.js index 86f8f77e..ededaad0 100644 --- a/src/parser/xsd/unique.js +++ b/src/parser/xsd/unique.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var KeyBase = require('./keybase'); diff --git a/src/parser/xsd/xsdElement.js b/src/parser/xsd/xsdElement.js index b5c98b65..619728d8 100644 --- a/src/parser/xsd/xsdElement.js +++ b/src/parser/xsd/xsdElement.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var Element = require('../element'); diff --git a/src/security/BasicAuthSecurity.js b/src/security/BasicAuthSecurity.js index a265fd02..8c942e7f 100644 --- a/src/security/BasicAuthSecurity.js +++ b/src/security/BasicAuthSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var _ = require('lodash'); diff --git a/src/security/BearerSecurity.js b/src/security/BearerSecurity.js index 514320ba..1af67330 100644 --- a/src/security/BearerSecurity.js +++ b/src/security/BearerSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var _ = require('lodash'); diff --git a/src/security/ClientSSLSecurity.js b/src/security/ClientSSLSecurity.js index 0c427b62..09f61cb6 100644 --- a/src/security/ClientSSLSecurity.js +++ b/src/security/ClientSSLSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('../globalize'); diff --git a/src/security/ClientSSLSecurityPFX.js b/src/security/ClientSSLSecurityPFX.js index c836a55a..e4a82d0e 100644 --- a/src/security/ClientSSLSecurityPFX.js +++ b/src/security/ClientSSLSecurityPFX.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('../globalize'); diff --git a/src/security/CookieSecurity.js b/src/security/CookieSecurity.js index 824aa681..9aba3604 100644 --- a/src/security/CookieSecurity.js +++ b/src/security/CookieSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var Security = require('./security'); diff --git a/src/security/NTLMSecurity.js b/src/security/NTLMSecurity.js index e98da3ad..c2f5a847 100644 --- a/src/security/NTLMSecurity.js +++ b/src/security/NTLMSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var _ = require('lodash'); diff --git a/src/security/WSSecurity.js b/src/security/WSSecurity.js index b365247e..bd711745 100644 --- a/src/security/WSSecurity.js +++ b/src/security/WSSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var Security = require('./security'); diff --git a/src/security/WSSecurityCert.js b/src/security/WSSecurityCert.js index 2aa6221b..28879064 100644 --- a/src/security/WSSecurityCert.js +++ b/src/security/WSSecurityCert.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('../globalize'); diff --git a/src/security/index.js b/src/security/index.js index 00cdde9b..17031520 100644 --- a/src/security/index.js +++ b/src/security/index.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var WSSecurityCert; diff --git a/src/security/security.js b/src/security/security.js index 260421a1..c037b3f0 100644 --- a/src/security/security.js +++ b/src/security/security.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var _ = require('lodash'); diff --git a/src/server.js b/src/server.js index 5ee90ea4..54e9016e 100644 --- a/src/server.js +++ b/src/server.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var g = require('./globalize'); diff --git a/src/soap.js b/src/soap.js index d227a62b..dbef7297 100644 --- a/src/soap.js +++ b/src/soap.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var Client = require('./client'), diff --git a/src/soapModel.js b/src/soapModel.js index 9a3ba3a8..93075c74 100644 --- a/src/soapModel.js +++ b/src/soapModel.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var assert = require('assert'); diff --git a/src/strip-bom.js b/src/strip-bom.js index ff8c7506..bfe770bd 100644 --- a/src/strip-bom.js +++ b/src/strip-bom.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + /* strip the BOM characters in the beginning of UTF-8 or other unicode encoded strings diff --git a/src/utils.js b/src/utils.js index a7dd4f35..cc030d26 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var crypto = require('crypto'); diff --git a/test/_socketStream.js b/test/_socketStream.js index afaaa564..6df5ed1f 100644 --- a/test/_socketStream.js +++ b/test/_socketStream.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var fs = require('fs'), diff --git a/test/client-customHttp-test.js b/test/client-customHttp-test.js index bf9c3026..b53fba6a 100644 --- a/test/client-customHttp-test.js +++ b/test/client-customHttp-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2015,2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var fs = require('fs'), diff --git a/test/client-customHttp-xsdinclude-test.js b/test/client-customHttp-xsdinclude-test.js index 30666fe9..498de2a5 100644 --- a/test/client-customHttp-xsdinclude-test.js +++ b/test/client-customHttp-xsdinclude-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var soap = require('..').soap, diff --git a/test/client-restrictions-test.js b/test/client-restrictions-test.js index 829383e4..cbaada0c 100644 --- a/test/client-restrictions-test.js +++ b/test/client-restrictions-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var fs = require('fs'), diff --git a/test/client-test.js b/test/client-test.js index c5827bf0..70fadab5 100644 --- a/test/client-test.js +++ b/test/client-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2013,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var fs = require('fs'), diff --git a/test/doc-lit-part-err-returned-test.js b/test/doc-lit-part-err-returned-test.js index 4221e37c..7dd3cd00 100644 --- a/test/doc-lit-part-err-returned-test.js +++ b/test/doc-lit-part-err-returned-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var fs = require('fs'), diff --git a/test/nillable-test.js b/test/nillable-test.js index c2d12e06..41f31060 100644 --- a/test/nillable-test.js +++ b/test/nillable-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var fs = require('fs'), diff --git a/test/qname/qname-test.js b/test/qname/qname-test.js index b51e9ff1..38f84ec7 100644 --- a/test/qname/qname-test.js +++ b/test/qname/qname-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + var QName = require('../../index').QName; var should = require('should'); diff --git a/test/request-response-samples-test.js b/test/request-response-samples-test.js index 8c94c84c..9fd94737 100644 --- a/test/request-response-samples-test.js +++ b/test/request-response-samples-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2014,2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var assert = require('assert'); diff --git a/test/security/BasicAuthSecurity.js b/test/security/BasicAuthSecurity.js index 582abd20..af38f43b 100644 --- a/test/security/BasicAuthSecurity.js +++ b/test/security/BasicAuthSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2014. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; describe('BasicAuthSecurity', function() { diff --git a/test/security/BearerSecurity.js b/test/security/BearerSecurity.js index ac54ddb3..3ee88ec0 100644 --- a/test/security/BearerSecurity.js +++ b/test/security/BearerSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2014. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; describe('BearerSecurity', function() { diff --git a/test/security/ClientSSLSecurity.js b/test/security/ClientSSLSecurity.js index aa8fad22..29f71e9e 100644 --- a/test/security/ClientSSLSecurity.js +++ b/test/security/ClientSSLSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2014,2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var fs = require('fs'), diff --git a/test/security/ClientSSLSecurityPFX.js b/test/security/ClientSSLSecurityPFX.js index 5d95f351..dbaf72ad 100644 --- a/test/security/ClientSSLSecurityPFX.js +++ b/test/security/ClientSSLSecurityPFX.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2015. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var fs = require('fs'), diff --git a/test/security/CookieSecurity.js b/test/security/CookieSecurity.js index 28fba40a..9a629a94 100644 --- a/test/security/CookieSecurity.js +++ b/test/security/CookieSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; describe('CookieSecurity', function() { diff --git a/test/security/WSSecurity.js b/test/security/WSSecurity.js index 1d6a4727..4e351d7e 100644 --- a/test/security/WSSecurity.js +++ b/test/security/WSSecurity.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var fs = require('fs'), diff --git a/test/security/WSSecurityCert.js b/test/security/WSSecurityCert.js index 601b207b..522f1cc7 100644 --- a/test/security/WSSecurityCert.js +++ b/test/security/WSSecurityCert.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2015,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var fs = require('fs'), diff --git a/test/server-client-document-test.js b/test/server-client-document-test.js index a6320ea5..63d715a3 100644 --- a/test/server-client-document-test.js +++ b/test/server-client-document-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var fs = require('fs'), diff --git a/test/server-client-rpc-test.js b/test/server-client-rpc-test.js index 0a56941c..24f8d207 100644 --- a/test/server-client-rpc-test.js +++ b/test/server-client-rpc-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var fs = require('fs'), diff --git a/test/server-options-test.js b/test/server-options-test.js index d1bf3c1d..5612e624 100644 --- a/test/server-options-test.js +++ b/test/server-options-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var fs = require('fs'), diff --git a/test/server-test.js b/test/server-test.js index a559dbce..bbdc4bd6 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2012,2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var fs = require('fs'), diff --git a/test/ssl-test.js b/test/ssl-test.js index c8ad547c..f71950b8 100644 --- a/test/ssl-test.js +++ b/test/ssl-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2014,2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var fs = require('fs'), diff --git a/test/wsdl-load-from-memory-test.js b/test/wsdl-load-from-memory-test.js index c7b32c8d..9bd02b5e 100644 --- a/test/wsdl-load-from-memory-test.js +++ b/test/wsdl-load-from-memory-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var fs = require('fs'), diff --git a/test/wsdl-parse-test.js b/test/wsdl-parse-test.js index 3d08af5d..682ca86a 100644 --- a/test/wsdl-parse-test.js +++ b/test/wsdl-parse-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2015,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + 'use strict'; var path = require('path'); diff --git a/test/wsdl-test.js b/test/wsdl-test.js index 5c27f8d9..09af33ac 100644 --- a/test/wsdl-test.js +++ b/test/wsdl-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2014,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var fs = require('fs'), diff --git a/test/wsdl/typeref/request.xml.js b/test/wsdl/typeref/request.xml.js index 80f0708a..61e35460 100755 --- a/test/wsdl/typeref/request.xml.js +++ b/test/wsdl/typeref/request.xml.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2015,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + module.exports = '\n '+ '\n '+ diff --git a/test/xs-date-format-test.js b/test/xs-date-format-test.js index 24a86c8b..437456ea 100644 --- a/test/xs-date-format-test.js +++ b/test/xs-date-format-test.js @@ -1,3 +1,8 @@ +// Copyright IBM Corp. 2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + "use strict"; var xmlHandler = require('./../src/parser/xmlHandler'); var assert = require('assert'); From 5f9ea2b26480733fe9718bbf18eae8958c8eb781 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Sun, 2 Jun 2019 16:04:55 -0700 Subject: [PATCH 75/89] Replace ursa with node 12 core crypto or node-rsa --- package.json | 8 ++------ src/security/WSSecurityCert.js | 34 ++++++++++++++++++--------------- test/security/WSSecurityCert.js | 16 +++------------- 3 files changed, 24 insertions(+), 34 deletions(-) diff --git a/package.json b/package.json index 79df41d2..a1205835 100644 --- a/package.json +++ b/package.json @@ -3,15 +3,14 @@ "version": "1.19.1", "description": "A minimal node SOAP client", "engines": { - "node": ">=6.0" + "node": ">=8.11.1" }, "dependencies": { "compress": "^0.99.0", "debug": "^4.1.1", "httpntlm": "^1.7.6", "lodash": "^4.17.11", - "optional": "^0.1.3", - "path": "^0.12.7", + "node-rsa": "^1.0.5", "request": "^2.72.0", "sax": "^1.2", "selectn": "^1.0.20", @@ -20,9 +19,6 @@ "xml-crypto": "^1.4.0", "xmlbuilder": "^10.1.1" }, - "optionalDependencies": { - "strong-ursa": "^0.11.0" - }, "repository": { "type": "git", "url": "https://github.com/strongloop/strong-soap.git" diff --git a/src/security/WSSecurityCert.js b/src/security/WSSecurityCert.js index 28879064..608858b3 100644 --- a/src/security/WSSecurityCert.js +++ b/src/security/WSSecurityCert.js @@ -5,16 +5,14 @@ 'use strict'; -var g = require('../globalize'); -var optional = require('optional'); -var ursa = optional('strong-ursa'); -var fs = require('fs'); -var path = require('path'); +var NodeRsa = require('node-rsa'); var SignedXml = require('xml-crypto').SignedXml; var uuid = require('uuid'); var Security = require('./security'); var xmlHandler = require('../parser/xmlHandler'); +var crypto = require('crypto'); + function addMinutes(date, minutes) { return new Date(date.getTime() + minutes * 60000); } @@ -36,28 +34,21 @@ function generateExpires() { return dateStringForSOAP(addMinutes(new Date(), 10)); } -function insertStr(src, dst, pos) { - return [dst.slice(0, pos), src, dst.slice(pos)].join(''); -} - function generateId() { return uuid.v4().replace(/-/gm, ''); } class WSSecurityCert extends Security { - constructor(privatePEM, publicP12PEM, password, encoding) { + constructor(privatePEM, publicP12PEM, password) { super(); - if (!ursa) { - throw new Error(g.f('Module {{ursa}} must be installed to use {{WSSecurityCert}}')); - } - this.privateKey = ursa.createPrivateKey(privatePEM, password, encoding); + this.publicP12PEM = publicP12PEM.toString() .replace('-----BEGIN CERTIFICATE-----', '') .replace('-----END CERTIFICATE-----', '') .replace(/(\r\n|\n|\r)/gm, ''); this.signer = new SignedXml(); - this.signer.signingKey = this.privateKey.toPrivatePem(); + this.signer.signingKey = this.getSigningKey(privatePEM, password); this.x509Id = 'x509-' + generateId(); var references = ['http://www.w3.org/2000/09/xmldsig#enveloped-signature', @@ -78,6 +69,19 @@ class WSSecurityCert extends Security { }; } + getSigningKey(privatePEM, password) { + if (typeof crypto.createPrivateKey === 'function') { + // Node 11 or above + this.privateKey = crypto.createPrivateKey({key: privatePEM, passphrase: password}); + return this.privateKey.export({type: 'pkcs1', format: 'pem'}); + } else { + // Node 10 or below, fall back to https://github.com/rzcoder/node-rsa + if (password) throw new Error('Passphrase is not supported by node-rsa.'); + this.privateKey = new NodeRsa(privatePEM); + return this.privateKey.exportKey('private'); + } + } + postProcess(headerElement, bodyElement) { this.created = generateCreated(); this.expires = generateExpires(); diff --git a/test/security/WSSecurityCert.js b/test/security/WSSecurityCert.js index 522f1cc7..dd4110d9 100644 --- a/test/security/WSSecurityCert.js +++ b/test/security/WSSecurityCert.js @@ -22,7 +22,7 @@ describe('WSSecurityCert', function() { if(process.platform === 'win32'){ return true; } - var instance = new WSSecurityCert(key, cert, '', 'utf8'); + var instance = new WSSecurityCert(key, cert, ''); instance.should.have.property('privateKey'); instance.should.have.property('publicP12PEM'); instance.should.have.property('signer'); @@ -36,7 +36,7 @@ describe('WSSecurityCert', function() { var passed = true; try { - new WSSecurityCert('*****', cert, '', 'utf8'); + new WSSecurityCert('*****', cert, ''); } catch(e) { passed = false; } @@ -46,16 +46,6 @@ describe('WSSecurityCert', function() { } passed = true; - - try { - new WSSecurityCert(key, cert, '', 'bob'); - } catch(e) { - passed = false; - } - - if (passed) { - throw new Error('bad encoding'); - } }); it('should insert a WSSecurity signing block when postProcess is called', @@ -63,7 +53,7 @@ describe('WSSecurityCert', function() { if(process.platform === 'win32'){ return true; } - var instance = new WSSecurityCert(key, cert, '', 'utf8'); + var instance = new WSSecurityCert(key, cert, ''); var env = XMLHandler.createSOAPEnvelope(); instance.postProcess(env.header, env.body); var xml = env.header.toString({pretty: false}); From 00a5e94174d92154c31ac3631877ed14512de5f7 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 3 Jun 2019 10:50:48 -0700 Subject: [PATCH 76/89] 1.20.0 * Replace ursa with node 12 core crypto or node-rsa (Raymond Feng) * chore: update copyrights years (Agnes Lin) * Add support for 1/0 booleans (Stefano Marotta) * fix: update lodash (jannyHou) --- CHANGES.md | 12 ++++++++++++ package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 781fe6a8..51573d36 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,15 @@ +2019-06-03, Version 1.20.0 +========================== + + * Replace ursa with node 12 core crypto or node-rsa (Raymond Feng) + + * chore: update copyrights years (Agnes Lin) + + * Add support for 1/0 booleans (Stefano Marotta) + + * fix: update lodash (jannyHou) + + 2019-05-02, Version 1.19.1 ========================== diff --git a/package.json b/package.json index a1205835..0556e6df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.19.1", + "version": "1.20.0", "description": "A minimal node SOAP client", "engines": { "node": ">=8.11.1" From 7c0e2b62406ce3b03eb6053528aa561d0867acff Mon Sep 17 00:00:00 2001 From: Allan Marques Date: Tue, 16 Jul 2019 10:09:32 -0300 Subject: [PATCH 77/89] add support attachments --- src/http.js | 32 ++++++++++++++++++++++++++++++-- test/client-attachment-test.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 test/client-attachment-test.js diff --git a/src/http.js b/src/http.js index 071f8c19..786fd895 100644 --- a/src/http.js +++ b/src/http.js @@ -10,6 +10,7 @@ var req = require('request'); var debug = require('debug')('strong-soap:http'); var debugSensitive = require('debug')('strong-soap:http:sensitive'); var httpntlm = require('httpntlm'); +var uuid = require('uuid/v4') var VERSION = require('../package.json').version; @@ -52,9 +53,13 @@ class HttpClient { }; var attr; var header; + var attachments = [] var mergeOptions = ['headers']; + if (exoptions) { + attachments = exoptions.attachments || []; + } - if (typeof data === 'string') { + if (typeof data === 'string' && attachments.length === 0) { headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); headers['Content-Type'] = 'application/x-www-form-urlencoded'; } @@ -71,7 +76,30 @@ class HttpClient { followAllRedirects: true }; - options.body = data; + if (attachments.length > 0) { + const start = uuid(); + headers['Content-Type'] = + 'multipart/related; type="application/xop+xml"; start="<' + start + '>"; start-info="text/xml"; boundary=' + uuid(); + const multipart = [{ + 'Content-Type': 'application/xop+xml; charset=UTF-8; type="text/xml"', + 'Content-ID': '<' + start + '>', + 'body': data, + }]; + + attachments.forEach((attachment) => { + multipart.push({ + 'Content-Type': attachment.mimetype, + 'Content-Transfer-Encoding': 'binary', + 'Content-ID': '<' + attachment.contentId + '>', + 'Content-Disposition': 'attachment; filename="' + attachment.name + '"', + 'body': attachment.body, + }); + }); + options.multipart = multipart; + } else { + options.body = data; + } + exoptions = exoptions || {}; for (attr in exoptions) { diff --git a/test/client-attachment-test.js b/test/client-attachment-test.js new file mode 100644 index 00000000..446716a8 --- /dev/null +++ b/test/client-attachment-test.js @@ -0,0 +1,34 @@ +'use strict'; + +var fs = require('fs'), + http = require('..').http, + //http = require('http'), + //WSDL = soap.WSDL, + assert = require('assert'), + QName = require('..').QName; + +describe('SOAP Http attachment', function() { + it('attachment null', function(done){ + var httpClient = new http({}) + const option = httpClient.buildRequest('http://localhost:1', {}, {}, {}); + assert.ok(!option.multipart) + assert.ok(option.body) + done() + }) + + it('attachment length 1', function(done){ + var httpClient = new http({}) + const optionEx = { + attachments:[{ + name: 'teste', + contentId: '123445555', + mimetype: 'jpeg', + body: 'stream file' + }] + } + const option = httpClient.buildRequest('http://localhost:1', {}, {}, optionEx); + assert.ok(option.multipart.length > 0) + assert.ok(!option.body) + done() + }) +}) \ No newline at end of file From 8b2b381cea3108e93be82749f0ac4a0b76b9585c Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Fri, 19 Jul 2019 09:47:55 -0700 Subject: [PATCH 78/89] 1.21.0 * add support attachments (Allan Marques) --- CHANGES.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 51573d36..c64eb7bd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +2019-07-19, Version 1.21.0 +========================== + + * add support attachments (Allan Marques) + + 2019-06-03, Version 1.20.0 ========================== diff --git a/package.json b/package.json index 0556e6df..b8473eec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.20.0", + "version": "1.21.0", "description": "A minimal node SOAP client", "engines": { "node": ">=8.11.1" From 084542f013515440806405e76df52fae0fefdb03 Mon Sep 17 00:00:00 2001 From: Christian Herzog Date: Tue, 17 Sep 2019 16:41:26 +0200 Subject: [PATCH 79/89] Avoid line feed problems (Win/Linux) --- test/wsdl-parse-test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/wsdl-parse-test.js b/test/wsdl-parse-test.js index 682ca86a..ac22e08b 100644 --- a/test/wsdl-parse-test.js +++ b/test/wsdl-parse-test.js @@ -32,8 +32,8 @@ describe(__filename, function() { var complexType = schema.complexTypes['ContactMedium']; var doc = complexType.children[0].children[0]; assert.equal(doc.name, 'documentation'); - assert.equal(doc.$value, 'Defines the method of contact to reach a ' + - 'party (in\n their specified role)'); + assert.equal(doc.$value.replace('\r', ''), 'Defines the method of ' + + 'contact to reach a party (in\n their specified role)'); // If we get here then we succeeded done(err); }); From 3a3b635eeca16b9ecfa3d061b4ee88d7f310ad23 Mon Sep 17 00:00:00 2001 From: Diana Lau Date: Tue, 22 Oct 2019 11:22:40 -0400 Subject: [PATCH 80/89] chore: add stalebot --- .github/stale.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 00000000..994a12db --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,23 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 14 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security + - critical + - p1 + - major +# Label to use when marking an issue as stale +staleLabel: stale +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: > + This issue has been closed due to continued inactivity. Thank you for your understanding. + If you believe this to be in error, please contact one of the code owners, + listed in the [`CODEOWNERS`](https://github.com/strongloop/strong-soap/blob/master/CODEOWNERS) file at the top-level of this repository. From c8dbde5248dc3b90644acb0e193d8457ae310113 Mon Sep 17 00:00:00 2001 From: Christopher Wade Date: Tue, 19 Nov 2019 15:11:30 +1000 Subject: [PATCH 81/89] fixed formating in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ca375eb7..0ea87dc2 100644 --- a/README.md +++ b/README.md @@ -156,7 +156,7 @@ Request, Response and Fault samples. The `options` argument allows you to customize the client with the following properties: -- `endpoint``: to override the SOAP service's host specified in the `.wsdl` file. +- `endpoint`: to override the SOAP service's host specified in the `.wsdl` file. - `request`: to override the [request](https://github.com/request/request) module. - `httpClient`: to provide your own http client that implements `request(rurl, data, callback, exheaders, exoptions)`. - `envelopeKey`: to set specific key instead of
<soap:Body>soap:Body>
From 5d07321c0a481bb18b8c6617f71688d60b177458 Mon Sep 17 00:00:00 2001 From: Avindra Goolcharan Date: Wed, 27 Nov 2019 23:17:37 -0500 Subject: [PATCH 82/89] Remove unnecessary files from npm packages Update `.npmrc` to avoid shipping garbage files to consumers on npm The largest folder is `coverage`, sitting at 1.8MB. ``` $ du -h -d1 strong-soap/ | sort -h 0 strong-soap/node_modules 4.0K strong-soap/.vscode 8.0K strong-soap/.github 60K strong-soap/example 72K strong-soap/xsds 120K strong-soap/intl 432K strong-soap/lib 440K strong-soap/src 476K strong-soap/.nyc_output 1.8M strong-soap/coverage 3.5M strong-soap/ ``` --- .npmignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.npmignore b/.npmignore index 3c4bfac3..f1d146b1 100644 --- a/.npmignore +++ b/.npmignore @@ -2,3 +2,7 @@ .idea test .travis.yml +coverage +.nyc_output +.github +.vscode From 2a9356a82bd508529550cc0155cc86ad91523f2d Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 10 Feb 2020 15:09:56 -0800 Subject: [PATCH 83/89] chore: add package-lock.json --- .npmrc | 1 + package-lock.json | 6706 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 6707 insertions(+) create mode 100644 .npmrc create mode 100644 package-lock.json diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..cafe685a --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=true diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..d3d6cf09 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6706 @@ +{ + "name": "strong-soap", + "version": "1.21.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", + "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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 + }, + "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" + } + } + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/traverse": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", + "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.4", + "@babel/types": "^7.8.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "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 + } + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, + "@textlint/ast-node-types": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.2.5.tgz", + "integrity": "sha512-+rEx4jLOeZpUcdvll7jEg/7hNbwYvHWFy4IGW/tk2JdbyB3SJVyIP6arAwzTH/sp/pO9jftfyZnRj4//sLbLvQ==", + "dev": true + }, + "@textlint/markdown-to-ast": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.0.9.tgz", + "integrity": "sha512-hfAWBvTeUGh5t5kTn2U3uP3qOSM1BSrxzl1jF3nn0ywfZXpRBZr5yRjXnl4DzIYawCtZOshmRi/tI3/x4TE1jQ==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "^4.0.3", + "debug": "^2.1.3", + "remark-frontmatter": "^1.2.0", + "remark-parse": "^5.0.0", + "structured-source": "^3.0.2", + "traverse": "^0.6.6", + "unified": "^6.1.6" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "accept-language": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/accept-language/-/accept-language-3.0.18.tgz", + "integrity": "sha1-9QJfF79lpGaoRYOMz5jNuHfYM4Q=", + "requires": { + "bcp47": "^1.1.2", + "stable": "^0.1.6" + } + }, + "acorn": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "dev": true + }, + "acorn-jsx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true + }, + "ajv": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", + "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "anchor-markdown-header": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz", + "integrity": "sha1-BFBj125qH5zTJ6V6ASaqD97Dcac=", + "dev": true, + "requires": { + "emoji-regex": "~6.1.0" + } + }, + "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-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "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==", + "dev": true, + "optional": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "optional": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "optional": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "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==", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" + }, + "babel-cli": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "chokidar": "^1.6.1", + "commander": "^2.11.0", + "convert-source-map": "^1.5.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "output-file-sync": "^1.1.2", + "path-is-absolute": "^1.0.1", + "slash": "^1.0.0", + "source-map": "^0.5.6", + "v8flags": "^2.1.1" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "^0.10.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "optional": 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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": 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, + "optional": 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, + "optional": 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, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": 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, + "optional": true + } + } + }, + "bcp47": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bcp47/-/bcp47-1.1.2.tgz", + "integrity": "sha1-NUvjMH/9CEM6ePXh4glYRfifx/4=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": 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" + } + }, + "boundary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", + "integrity": "sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "optional": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "brackets2dots": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brackets2dots/-/brackets2dots-1.1.0.tgz", + "integrity": "sha1-Pz1AN1/GYM4P0AT6J9Z7NPlGmsM=" + }, + "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 + }, + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "optional": 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" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + } + } + }, + "caching-transform": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", + "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", + "dev": true, + "requires": { + "hasha": "^3.0.0", + "make-dir": "^2.0.0", + "package-hash": "^3.0.0", + "write-file-atomic": "^2.4.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001027", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001027.tgz", + "integrity": "sha512-7xvKeErvXZFtUItTHgNtLgS9RJpVnwBlWX8jSo/BO8VsF6deszemZSkJJJA1KOKrXuzZH4WALpAJdq5EyfgMLg==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "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==", + "dev": true, + "optional": 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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + } + } + }, + "cldrjs": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.1.tgz", + "integrity": "sha512-xyiP8uAm8K1IhmpDndZLraloW1yqu0L+HYdQ7O1aGPxx9Cr+BMnPANlNhSt++UKfxytL2hd2NPXgTjiy7k43Ew==" + }, + "cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "^7.1.1" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "optional": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "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" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "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 + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "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, + "optional": true + }, + "compress": { + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/compress/-/compress-0.99.0.tgz", + "integrity": "sha1-l+MBwlxNAfCX2FED9l7Msud5ZQI=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "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 + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "optional": true + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "coveralls": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz", + "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.0", + "request": "^2.88.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "cp-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", + "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^2.0.0", + "nested-error-stacks": "^2.0.0", + "pify": "^4.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "curry2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/curry2/-/curry2-1.0.3.tgz", + "integrity": "sha1-OBkdVfEGC/6kfKCACThbuHj2YS8=", + "requires": { + "fast-bind": "^1.0.0" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "optional": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "optional": 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, + "optional": 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, + "optional": 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, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": 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, + "optional": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "doctoc": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/doctoc/-/doctoc-1.4.0.tgz", + "integrity": "sha512-8IAq3KdMkxhXCUF+xdZxdJxwuz8N2j25sMgqiu4U4JWluN9tRKMlAalxGASszQjlZaBprdD2YfXpL3VPWUD4eg==", + "dev": true, + "requires": { + "@textlint/markdown-to-ast": "~6.0.9", + "anchor-markdown-header": "^0.5.5", + "htmlparser2": "~3.9.2", + "minimist": "~1.2.0", + "underscore": "~1.8.3", + "update-section": "^0.3.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "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" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dotsplit.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dotsplit.js/-/dotsplit.js-1.1.0.tgz", + "integrity": "sha1-JaI56r6SKpH/pdKhctbJ+4JFHgI=" + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.3.347", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.347.tgz", + "integrity": "sha512-IityliF5ZY4nLa4DaXOGrWVeTK3OcN6LJECVe60DOX/SEF0zohVRxZHJXu4ZA8bW0A3K6Skcn67G20MGXOqhaA==", + "dev": true + }, + "emoji-regex": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.3.tgz", + "integrity": "sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI=", + "dev": true + }, + "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==", + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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 + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "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" + } + } + } + }, + "eslint-config-google": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.12.0.tgz", + "integrity": "sha512-SHDM3nIRCJBACjf8c/H6FvCwRmKbphESNl3gJFBNbw4KYDLCONB3ABYLXDGF+iaVP9XSTND/Q5/PuGoFkp4xbg==", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "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.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "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 + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "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": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "optional": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": 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, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-bind/-/fast-bind-1.0.0.tgz", + "integrity": "sha1-f6llLLMyX1zR4lLWy08WDeGnbnU=" + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + }, + "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==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dev": true, + "requires": { + "format": "^0.2.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "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 + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "optional": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "optional": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "foreground-child": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", + "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "dev": true, + "requires": { + "cross-spawn": "^4", + "signal-exit": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "optional": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "optional": 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" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": 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" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": 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 + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "optional": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "optional": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "globalize": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.4.2.tgz", + "integrity": "sha512-IfKeYI5mAITBmT5EnH8kSQB5uGson4Fkj2XtTpyEbIS7IHNfLHoeTyLJ6tfjiKC6cJXng3IhVurDk5C7ORqFhQ==", + "requires": { + "cldrjs": "^0.5.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "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 + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "optional": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": 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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hasha": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", + "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", + "dev": true, + "requires": { + "is-stream": "^1.0.1" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "dev": true + }, + "html-escaper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", + "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", + "dev": true + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "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 + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "httpntlm": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.7.6.tgz", + "integrity": "sha1-aZHoNSg2AH1nEBuD247Q+RX5BtA=", + "requires": { + "httpreq": ">=0.4.22", + "underscore": "~1.7.0" + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" + }, + "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, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "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" + } + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^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==" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "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, + "optional": 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, + "optional": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true, + "optional": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "optional": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "optional": true + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "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, + "optional": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true, + "optional": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true, + "optional": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true + }, + "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, + "optional": true + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "optional": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "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 + } + } + }, + "istanbul-reports": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "jshint": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.11.0.tgz", + "integrity": "sha512-ooaD/hrBPhu35xXW4gn+o3SOuzht73gdBuffgJzrZBJZPGgGiiTvJEgTyxFvBO2nz0+X1G6etF8SzUODTlLY6Q==", + "dev": true, + "requires": { + "cli": "~1.0.0", + "console-browserify": "1.1.x", + "exit": "0.1.x", + "htmlparser2": "3.8.x", + "lodash": "~4.17.11", + "minimatch": "~3.0.2", + "shelljs": "0.3.x", + "strip-json-comments": "1.0.x" + }, + "dependencies": { + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + } + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "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==" + }, + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.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" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "optional": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "optional": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true, + "optional": true + }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "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 + } + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "requires": { + "mime-db": "1.43.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "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, + "optional": 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, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "optional": 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" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": 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, + "optional": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-rsa": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.0.7.tgz", + "integrity": "sha512-idwRXma6scFufZmbaKkHpJoLL93yynRefP6yur13wZ5i9FR35ex451KCoF2OORDeJanyRVahmjjiwmUlCnTqJA==", + "requires": { + "asn1": "^0.2.4" + } + }, + "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": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "nyc": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", + "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "caching-transform": "^3.0.2", + "convert-source-map": "^1.6.0", + "cp-file": "^6.2.0", + "find-cache-dir": "^2.1.0", + "find-up": "^3.0.0", + "foreground-child": "^1.5.6", + "glob": "^7.1.3", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", + "merge-source-map": "^1.1.0", + "resolve-from": "^4.0.0", + "rimraf": "^2.6.3", + "signal-exit": "^3.0.2", + "spawn-wrap": "^1.4.2", + "test-exclude": "^5.2.3", + "uuid": "^3.3.2", + "yargs": "^13.2.2", + "yargs-parser": "^13.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "optional": 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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "optional": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "optional": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "optional": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + }, + "dependencies": { + "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 + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "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" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", + "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^3.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "optional": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "optional": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "optional": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true, + "optional": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "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 + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "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, + "optional": 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, + "optional": true + } + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "readable-stream": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "dev": true, + "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, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": 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": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": 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": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": 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": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": 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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": 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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "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, + "optional": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": 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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": 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": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": 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, + "optional": 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, + "optional": 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, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": 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": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": 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, + "optional": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": 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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "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, + "optional": 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, + "optional": true + } + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "optional": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "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, + "optional": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "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": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, + "remark-frontmatter": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-1.3.2.tgz", + "integrity": "sha512-2eayxITZ8rezsXdgcXnYB3iLivohm2V/ZT4Ne8uhua6A4pk6GdLE2ZzJnbnINtD1HRLaTdB7RwF9sgUbMptJZA==", + "dev": true, + "requires": { + "fault": "^1.0.1", + "xtend": "^4.0.1" + } + }, + "remark-parse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", + "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", + "dev": true, + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "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": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true, + "optional": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "optional": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "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-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true, + "optional": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "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==", + "dev": true, + "optional": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "optional": 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", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "selectn": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/selectn/-/selectn-1.1.2.tgz", + "integrity": "sha1-/IrNkd8/RaywGJHGdzrlKYUdaxc=", + "requires": { + "brackets2dots": "^1.1.0", + "curry2": "^1.0.0", + "debug": "^2.5.2", + "dotsplit.js": "^1.0.3" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "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, + "optional": 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": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true + }, + "should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "requires": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "requires": { + "should-type": "^1.4.0" + } + }, + "should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "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, + "optional": 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, + "optional": 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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": 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": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": 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, + "optional": 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": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": 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, + "optional": 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, + "optional": 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, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": 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, + "optional": true + } + } + }, + "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, + "optional": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "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, + "optional": 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.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true, + "optional": true + }, + "spawn-wrap": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", + "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "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, + "optional": 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": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "optional": 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": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "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 + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "strong-globalize": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/strong-globalize/-/strong-globalize-4.1.3.tgz", + "integrity": "sha512-SJegV7w5D4AodEspZJtJ7rls3fmi+Zc0PdyJCqBsg4RN9B8TC80/uAI2fikC+s1Jp9FLvr2vDX8f0Fqc62M4OA==", + "requires": { + "accept-language": "^3.0.18", + "debug": "^4.1.1", + "globalize": "^1.4.2", + "lodash": "^4.17.4", + "md5": "^2.2.1", + "mkdirp": "^0.5.1", + "os-locale": "^3.1.0", + "yamljs": "^0.3.0" + } + }, + "structured-source": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", + "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", + "dev": true, + "requires": { + "boundary": "^1.0.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "timekeeper": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/timekeeper/-/timekeeper-2.2.0.tgz", + "integrity": "sha512-W3AmPTJWZkRwu+iSNxPIsLZ2ByADsOLbbLxe46UJyWj3mlYLlwucKiq+/dPm0l9wTzqoF3/2PH0AGFCebjq23A==", + "dev": true + }, + "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-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "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": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "optional": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" + } + }, + "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, + "optional": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "dev": true, + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "optional": 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": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "optional": 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": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "optional": 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": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "optional": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + } + } + }, + "update-section": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/update-section/-/update-section-0.3.3.tgz", + "integrity": "sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true, + "optional": 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, + "optional": true + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "^1.1.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" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "dev": true, + "requires": { + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", + "dev": true + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "dev": true, + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "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 + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, + "xml-crypto": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-1.4.0.tgz", + "integrity": "sha512-K8FRdRxICVulK4WhiTUcJrRyAIJFPVOqxfurA3x/JlmXBTxy+SkEENF6GeRt7p/rB6WSOUS9g0gXNQw5n+407g==", + "requires": { + "xmldom": "0.1.27", + "xpath": "0.0.27" + } + }, + "xmlbuilder": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", + "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==" + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xpath": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" + }, + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yamljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "requires": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + } + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "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.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} From 52a03937306f21f78ef53d1a3659c26c7776ed37 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 10 Feb 2020 15:11:47 -0800 Subject: [PATCH 84/89] 1.22.0 * chore: add package-lock.json (Raymond Feng) * Remove unnecessary files from npm packages (Avindra Goolcharan) * fixed formating in README (Christopher Wade) * chore: add stalebot (Diana Lau) * Avoid line feed problems (Win/Linux) (Christian Herzog) --- CHANGES.md | 14 ++++++++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c64eb7bd..bd4a9a26 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,17 @@ +2020-02-10, Version 1.22.0 +========================== + + * chore: add package-lock.json (Raymond Feng) + + * Remove unnecessary files from npm packages (Avindra Goolcharan) + + * fixed formating in README (Christopher Wade) + + * chore: add stalebot (Diana Lau) + + * Avoid line feed problems (Win/Linux) (Christian Herzog) + + 2019-07-19, Version 1.21.0 ========================== diff --git a/package-lock.json b/package-lock.json index d3d6cf09..38041628 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.21.0", + "version": "1.22.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b8473eec..45051074 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.21.0", + "version": "1.22.0", "description": "A minimal node SOAP client", "engines": { "node": ">=8.11.1" From 0bdb991fdf3e901846782fd67c37c26736faf50f Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Thu, 20 Feb 2020 10:27:01 -0800 Subject: [PATCH 85/89] chore: remove unused require statements --- example/ntlm.js | 8 -------- example/weather.js | 5 ----- test/client-customHttp-test.js | 2 -- test/client-customHttp-xsdinclude-test.js | 2 -- test/nillable-test.js | 10 ++-------- test/server-client-document-test.js | 6 +----- test/server-client-rpc-test.js | 7 +------ test/server-options-test.js | 3 +-- test/wsdl-test.js | 2 -- 9 files changed, 5 insertions(+), 40 deletions(-) diff --git a/example/ntlm.js b/example/ntlm.js index f8fb4de1..73bfbc8f 100644 --- a/example/ntlm.js +++ b/example/ntlm.js @@ -5,15 +5,7 @@ "use strict"; -var fs = require('fs'); -var assert = require('assert'); -var request = require('request'); -var http = require('http'); -var lastReqAddress; var soap = require('..').soap; -var XMLHandler = soap.XMLHandler; -var xmlHandler = new XMLHandler(); -var util = require('util'); var NTLMSecurity = require('..').NTLMSecurity; //example to show how to authenticate diff --git a/example/weather.js b/example/weather.js index 914c1f32..5a961367 100644 --- a/example/weather.js +++ b/example/weather.js @@ -5,11 +5,6 @@ "use strict"; -var fs = require('fs'), - assert = require('assert'), - request = require('request'), - http = require('http'), - lastReqAddress; var soap = require('..').soap; var XMLHandler = soap.XMLHandler; var xmlHandler = new XMLHandler(); diff --git a/test/client-customHttp-test.js b/test/client-customHttp-test.js index b53fba6a..777c5d21 100644 --- a/test/client-customHttp-test.js +++ b/test/client-customHttp-test.js @@ -7,10 +7,8 @@ var fs = require('fs'), soap = require('..').soap, - http = require('http'), assert = require('assert'), duplexer = require('duplexer'), - req = require('request'), httpClient = require('..').http, // stream = require('stream'), stream = require('readable-stream'), diff --git a/test/client-customHttp-xsdinclude-test.js b/test/client-customHttp-xsdinclude-test.js index 498de2a5..7b5bf89a 100644 --- a/test/client-customHttp-xsdinclude-test.js +++ b/test/client-customHttp-xsdinclude-test.js @@ -6,9 +6,7 @@ 'use strict'; var soap = require('..').soap, - http = require('http'), assert = require('assert'), - req = require('request'), httpClient = require('..').http, util = require('util'), events = require('events'), diff --git a/test/nillable-test.js b/test/nillable-test.js index 41f31060..b8f99402 100644 --- a/test/nillable-test.js +++ b/test/nillable-test.js @@ -5,14 +5,8 @@ "use strict"; -var fs = require('fs'), - soap = require('..').soap, - assert = require('assert'), - request = require('request'), - http = require('http'), - lastReqAddress; - - +var soap = require('..').soap, + assert = require('assert'); describe('Nillable tests ', function() { diff --git a/test/server-client-document-test.js b/test/server-client-document-test.js index 63d715a3..c52372d1 100644 --- a/test/server-client-document-test.js +++ b/test/server-client-document-test.js @@ -8,11 +8,7 @@ var fs = require('fs'), soap = require('..').soap, assert = require('assert'), - request = require('request'), - http = require('http'), - lastReqAddress; - - + http = require('http'); describe('Document style tests', function() { diff --git a/test/server-client-rpc-test.js b/test/server-client-rpc-test.js index 24f8d207..b620b531 100644 --- a/test/server-client-rpc-test.js +++ b/test/server-client-rpc-test.js @@ -8,15 +8,10 @@ var fs = require('fs'), soap = require('..').soap, assert = require('assert'), - request = require('request'), - http = require('http'), - lastReqAddress; - - + http = require('http'); describe('RPC style tests', function() { - describe('RPC Literal', function() { var test = {}; test.server = null; diff --git a/test/server-options-test.js b/test/server-options-test.js index 5612e624..d8aaa676 100644 --- a/test/server-options-test.js +++ b/test/server-options-test.js @@ -9,8 +9,7 @@ var fs = require('fs'), soap = require('..').soap, assert = require('assert'), request = require('request'), - http = require('http'), - lastReqAddress; + http = require('http'); var test = {}; test.server = null; diff --git a/test/wsdl-test.js b/test/wsdl-test.js index 09af33ac..099e68c3 100644 --- a/test/wsdl-test.js +++ b/test/wsdl-test.js @@ -9,8 +9,6 @@ var fs = require('fs'), soap = require('..').soap, assert = require('assert'), should = require('should'), - request = require('request'), - http = require('http'), async = require('async'), path = require('path'); From 44a0de2d90a969b8fd43de45186e6b4572cd7575 Mon Sep 17 00:00:00 2001 From: Richard Sunbury Date: Mon, 24 Feb 2020 13:24:08 -0800 Subject: [PATCH 86/89] Allow nillable date to be null --- src/parser/xmlHandler.js | 2 +- .../Dummy__should_parse_nil/common.xsd | 3 ++- .../Dummy__should_parse_nil/request.json | 3 ++- .../Dummy__should_parse_nil/request.xml | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/parser/xmlHandler.js b/src/parser/xmlHandler.js index 5574891f..fcfab39d 100644 --- a/src/parser/xmlHandler.js +++ b/src/parser/xmlHandler.js @@ -878,7 +878,7 @@ function toXmlDateTime(date) { } function toXmlDateOrTime(descriptor, val) { - if (!descriptor || !descriptor.type) return val; + if (!descriptor || !descriptor.type || val === null) return val; if (descriptor.type.name === 'date') { val = toXmlDate(val); } else if (descriptor.type.name === 'time') { diff --git a/test/request-response-samples/Dummy__should_parse_nil/common.xsd b/test/request-response-samples/Dummy__should_parse_nil/common.xsd index b26d8ff3..f7cf9eef 100644 --- a/test/request-response-samples/Dummy__should_parse_nil/common.xsd +++ b/test/request-response-samples/Dummy__should_parse_nil/common.xsd @@ -22,7 +22,8 @@ - + +
diff --git a/test/request-response-samples/Dummy__should_parse_nil/request.json b/test/request-response-samples/Dummy__should_parse_nil/request.json index debf47e5..5faa79b8 100644 --- a/test/request-response-samples/Dummy__should_parse_nil/request.json +++ b/test/request-response-samples/Dummy__should_parse_nil/request.json @@ -2,7 +2,8 @@ "DummyRequest": { "DummyField1": "Humpty", "DummyFilter": { - "DummyStringFilter": null + "DummyStringFilter": null, + "DummyDateFilter": null } } } diff --git a/test/request-response-samples/Dummy__should_parse_nil/request.xml b/test/request-response-samples/Dummy__should_parse_nil/request.xml index e2c19381..9cd7af66 100644 --- a/test/request-response-samples/Dummy__should_parse_nil/request.xml +++ b/test/request-response-samples/Dummy__should_parse_nil/request.xml @@ -6,6 +6,7 @@ Humpty + From fe4cb2742183ac0bb8e71cc973301ce7501b60e8 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Tue, 25 Feb 2020 10:47:58 -0800 Subject: [PATCH 87/89] 1.22.1 * Allow nillable date to be null (Richard Sunbury) * chore: remove unused require statements (Raymond Feng) --- CHANGES.md | 8 ++++++++ package-lock.json | 10 +++++----- package.json | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index bd4a9a26..a2f2bdd3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,11 @@ +2020-02-25, Version 1.22.1 +========================== + + * Allow nillable date to be null (Richard Sunbury) + + * chore: remove unused require statements (Raymond Feng) + + 2020-02-10, Version 1.22.0 ========================== diff --git a/package-lock.json b/package-lock.json index 38041628..ffa7b87d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.22.0", + "version": "1.22.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -648,13 +648,13 @@ }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "dev": true }, "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "dev": true }, @@ -3870,7 +3870,7 @@ }, "json5": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, @@ -6106,7 +6106,7 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, diff --git a/package.json b/package.json index 45051074..ad5c123e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.22.0", + "version": "1.22.1", "description": "A minimal node SOAP client", "engines": { "node": ">=8.11.1" From b7384fe85443f50036dcb8759764ac60315cf936 Mon Sep 17 00:00:00 2001 From: Marco RR Date: Mon, 21 Dec 2020 11:32:28 -0300 Subject: [PATCH 88/89] Updates `xml-crypto` dependency to `2.0.0` --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ffa7b87d..0854e9f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6590,9 +6590,9 @@ "dev": true }, "xml-crypto": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-1.4.0.tgz", - "integrity": "sha512-K8FRdRxICVulK4WhiTUcJrRyAIJFPVOqxfurA3x/JlmXBTxy+SkEENF6GeRt7p/rB6WSOUS9g0gXNQw5n+407g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-2.0.0.tgz", + "integrity": "sha512-/a04qr7RpONRZHOxROZ6iIHItdsQQjN3sj8lJkYDDss8tAkEaAs0VrFjb3tlhmS5snQru5lTs9/5ISSMdPDHlg==", "requires": { "xmldom": "0.1.27", "xpath": "0.0.27" diff --git a/package.json b/package.json index ad5c123e..5b855ab0 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "selectn": "^1.0.20", "strong-globalize": "^4.1.3", "uuid": "^3.2.1", - "xml-crypto": "^1.4.0", + "xml-crypto": "^2.0.0", "xmlbuilder": "^10.1.1" }, "repository": { From 17842c074557c8983949247348eec76c79674897 Mon Sep 17 00:00:00 2001 From: Marco RR Date: Mon, 21 Dec 2020 11:37:20 -0300 Subject: [PATCH 89/89] Updates minor version to `1.3.0` --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5b855ab0..7d5c2c1f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "strong-soap", - "version": "1.22.1", + "version": "1.23.0", "description": "A minimal node SOAP client", "engines": { "node": ">=8.11.1"