feat(kb.gbapp): TSV are replaced with MS Excel files, to store tabular information.
This commit is contained in:
		
							parent
							
								
									3f6668da0d
								
							
						
					
					
						commit
						246b2226bf
					
				
					 8 changed files with 854 additions and 123 deletions
				
			
		
							
								
								
									
										688
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										688
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -1707,6 +1707,15 @@
 | 
			
		|||
      "integrity": "sha512-e070xJdKBEEdAgCJJm1nBSdGv4Y6C2LXP9PYHBUJPV/3eUkZ46bnnkzejmXmTFYyIsiouLPt26yGgsHZL7WDvg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "adler-32": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "exit-on-epipe": "~1.0.1",
 | 
			
		||||
        "printj": "~1.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "agent-base": {
 | 
			
		||||
      "version": "4.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -1854,6 +1863,82 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
 | 
			
		||||
    },
 | 
			
		||||
    "archiver": {
 | 
			
		||||
      "version": "3.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "archiver-utils": "^2.1.0",
 | 
			
		||||
        "async": "^2.6.3",
 | 
			
		||||
        "buffer-crc32": "^0.2.1",
 | 
			
		||||
        "glob": "^7.1.4",
 | 
			
		||||
        "readable-stream": "^3.4.0",
 | 
			
		||||
        "tar-stream": "^2.1.0",
 | 
			
		||||
        "zip-stream": "^2.1.2"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "async": {
 | 
			
		||||
          "version": "2.6.3",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
 | 
			
		||||
          "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "lodash": "^4.17.14"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "lodash": {
 | 
			
		||||
          "version": "4.17.15",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
 | 
			
		||||
          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
 | 
			
		||||
        },
 | 
			
		||||
        "readable-stream": {
 | 
			
		||||
          "version": "3.4.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
 | 
			
		||||
          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "inherits": "^2.0.3",
 | 
			
		||||
            "string_decoder": "^1.1.1",
 | 
			
		||||
            "util-deprecate": "^1.0.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "safe-buffer": {
 | 
			
		||||
          "version": "5.2.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
 | 
			
		||||
          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
 | 
			
		||||
        },
 | 
			
		||||
        "string_decoder": {
 | 
			
		||||
          "version": "1.3.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
 | 
			
		||||
          "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "safe-buffer": "~5.2.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "archiver-utils": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "glob": "^7.1.4",
 | 
			
		||||
        "graceful-fs": "^4.2.0",
 | 
			
		||||
        "lazystream": "^1.0.0",
 | 
			
		||||
        "lodash.defaults": "^4.2.0",
 | 
			
		||||
        "lodash.difference": "^4.5.0",
 | 
			
		||||
        "lodash.flatten": "^4.4.0",
 | 
			
		||||
        "lodash.isplainobject": "^4.0.6",
 | 
			
		||||
        "lodash.union": "^4.6.0",
 | 
			
		||||
        "normalize-path": "^3.0.0",
 | 
			
		||||
        "readable-stream": "^2.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "graceful-fs": {
 | 
			
		||||
          "version": "4.2.2",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
 | 
			
		||||
          "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q=="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "archy": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -1881,6 +1966,15 @@
 | 
			
		|||
        "sprintf-js": "~1.0.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "arguments-extended": {
 | 
			
		||||
      "version": "0.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/arguments-extended/-/arguments-extended-0.0.3.tgz",
 | 
			
		||||
      "integrity": "sha1-YQfkkX0OtvCk3WYyD8Fa/HLvSUY=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "extended": "~0.0.3",
 | 
			
		||||
        "is-extended": "~0.0.8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "argv-formatter": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -1910,6 +2004,16 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
 | 
			
		||||
    },
 | 
			
		||||
    "array-extended": {
 | 
			
		||||
      "version": "0.0.11",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/array-extended/-/array-extended-0.0.11.tgz",
 | 
			
		||||
      "integrity": "sha1-1xRK50jek8pybxIQCdv/FibRZL0=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "arguments-extended": "~0.0.3",
 | 
			
		||||
        "extended": "~0.0.3",
 | 
			
		||||
        "is-extended": "~0.0.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "array-find-index": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2414,6 +2518,11 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "base64-js": {
 | 
			
		||||
      "version": "1.3.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
 | 
			
		||||
      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
 | 
			
		||||
    },
 | 
			
		||||
    "base64url": {
 | 
			
		||||
      "version": "3.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -3341,6 +3450,15 @@
 | 
			
		|||
      "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "buffer": {
 | 
			
		||||
      "version": "5.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Xpgy0IwHK2N01ncykXTy6FpCWuM+CJSHoPVBLyNqyrWxsedpLvwsYUhf0ME3WRFNUhos0dMamz9cOS/xRDtU5g==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "base64-js": "^1.0.2",
 | 
			
		||||
        "ieee754": "^1.1.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "buffer-alloc": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -3355,6 +3473,11 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
 | 
			
		||||
    },
 | 
			
		||||
    "buffer-crc32": {
 | 
			
		||||
      "version": "0.2.13",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
 | 
			
		||||
      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
 | 
			
		||||
    },
 | 
			
		||||
    "buffer-equal-constant-time": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -3370,6 +3493,11 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
 | 
			
		||||
    },
 | 
			
		||||
    "buffer-indexof-polyfill": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8="
 | 
			
		||||
    },
 | 
			
		||||
    "buffers": {
 | 
			
		||||
      "version": "0.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -3551,6 +3679,17 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
 | 
			
		||||
      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
 | 
			
		||||
    },
 | 
			
		||||
    "cfb": {
 | 
			
		||||
      "version": "1.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.3.tgz",
 | 
			
		||||
      "integrity": "sha512-joXBW0nMuwV9no7UTMiyVJnQL6XIU3ThXVjFUDHgl9MpILPOomyfaGqC290VELZ48bbQKZXnQ81UT5HouTxHsw==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "adler-32": "~1.2.0",
 | 
			
		||||
        "commander": "^2.16.0",
 | 
			
		||||
        "crc-32": "~1.2.0",
 | 
			
		||||
        "printj": "~1.1.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "chai": {
 | 
			
		||||
      "version": "4.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -3938,6 +4077,22 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
 | 
			
		||||
      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
 | 
			
		||||
    },
 | 
			
		||||
    "codepage": {
 | 
			
		||||
      "version": "1.14.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz",
 | 
			
		||||
      "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "commander": "~2.14.1",
 | 
			
		||||
        "exit-on-epipe": "~1.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "commander": {
 | 
			
		||||
          "version": "2.14.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
 | 
			
		||||
          "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "collection-visit": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4083,6 +4238,24 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
 | 
			
		||||
    },
 | 
			
		||||
    "commonmark": {
 | 
			
		||||
      "version": "0.29.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/commonmark/-/commonmark-0.29.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Wc3kvAIm0EK85pHsM95Fev31wEN6/zQpwd2qcLDL8psjHRoUFvUeGHevIJAdToWUuFoX8WI/gmeDauqy32xgJQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "entities": "~ 1.1.1",
 | 
			
		||||
        "mdurl": "~ 1.0.1",
 | 
			
		||||
        "minimist": "~ 1.2.0",
 | 
			
		||||
        "string.prototype.repeat": "^0.2.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "minimist": {
 | 
			
		||||
          "version": "1.2.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
 | 
			
		||||
          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "compare-func": {
 | 
			
		||||
      "version": "1.3.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4098,6 +4271,46 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
 | 
			
		||||
    },
 | 
			
		||||
    "compress-commons": {
 | 
			
		||||
      "version": "2.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "buffer-crc32": "^0.2.13",
 | 
			
		||||
        "crc32-stream": "^3.0.1",
 | 
			
		||||
        "normalize-path": "^3.0.0",
 | 
			
		||||
        "readable-stream": "^2.3.6"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "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=="
 | 
			
		||||
        },
 | 
			
		||||
        "readable-stream": {
 | 
			
		||||
          "version": "2.3.6",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
 | 
			
		||||
          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
 | 
			
		||||
          "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"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "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==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "safe-buffer": "~5.1.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "concat-map": {
 | 
			
		||||
      "version": "0.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4411,6 +4624,57 @@
 | 
			
		|||
        "simple-encryptor": "^3.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "crc": {
 | 
			
		||||
      "version": "3.8.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
 | 
			
		||||
      "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "buffer": "^5.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "crc-32": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "exit-on-epipe": "~1.0.1",
 | 
			
		||||
        "printj": "~1.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "crc32-stream": {
 | 
			
		||||
      "version": "3.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "crc": "^3.4.4",
 | 
			
		||||
        "readable-stream": "^3.4.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "readable-stream": {
 | 
			
		||||
          "version": "3.4.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
 | 
			
		||||
          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "inherits": "^2.0.3",
 | 
			
		||||
            "string_decoder": "^1.1.1",
 | 
			
		||||
            "util-deprecate": "^1.0.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "safe-buffer": {
 | 
			
		||||
          "version": "5.2.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
 | 
			
		||||
          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
 | 
			
		||||
        },
 | 
			
		||||
        "string_decoder": {
 | 
			
		||||
          "version": "1.3.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
 | 
			
		||||
          "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "safe-buffer": "~5.2.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "create-error-class": {
 | 
			
		||||
      "version": "3.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4568,6 +4832,16 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "date-extended": {
 | 
			
		||||
      "version": "0.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/date-extended/-/date-extended-0.0.6.tgz",
 | 
			
		||||
      "integrity": "sha1-I4AtV90b94GIE/4MMuhRqG2iZ8k=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "array-extended": "~0.0.3",
 | 
			
		||||
        "extended": "~0.0.3",
 | 
			
		||||
        "is-extended": "~0.0.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "date-unit-ms": {
 | 
			
		||||
      "version": "1.1.13",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/date-unit-ms/-/date-unit-ms-1.1.13.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4647,6 +4921,11 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "declare.js": {
 | 
			
		||||
      "version": "0.0.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/declare.js/-/declare.js-0.0.8.tgz",
 | 
			
		||||
      "integrity": "sha1-BHit/5VkwAT1Hfc9i8E0AZ0o3N4="
 | 
			
		||||
    },
 | 
			
		||||
    "decode-uri-component": {
 | 
			
		||||
      "version": "0.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5170,7 +5449,6 @@
 | 
			
		|||
      "version": "0.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
 | 
			
		||||
      "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "readable-stream": "^2.0.2"
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -5270,6 +5548,11 @@
 | 
			
		|||
        "tapable": "^1.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "entities": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
 | 
			
		||||
    },
 | 
			
		||||
    "env-ci": {
 | 
			
		||||
      "version": "3.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-3.2.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5889,6 +6172,31 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
 | 
			
		||||
      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
 | 
			
		||||
    },
 | 
			
		||||
    "exceljs": {
 | 
			
		||||
      "version": "1.15.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-1.15.0.tgz",
 | 
			
		||||
      "integrity": "sha512-72CySYLU1oBIixpBkWV0mR6YM+X8v2GyyWgKBovS9Hso0Ul7S3FtlWGeAifxB+lpzznokWMRDLMZ8EyS2tX6xg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "archiver": "^3.0.0",
 | 
			
		||||
        "fast-csv": "^2.4.1",
 | 
			
		||||
        "jszip": "^3.1.5",
 | 
			
		||||
        "moment": "^2.22.2",
 | 
			
		||||
        "promish": "^5.1.1",
 | 
			
		||||
        "sax": "^1.2.4",
 | 
			
		||||
        "tmp": "^0.1.0",
 | 
			
		||||
        "unzipper": "^0.9.12"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "tmp": {
 | 
			
		||||
          "version": "0.1.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz",
 | 
			
		||||
          "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "rimraf": "^2.6.3"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "exclude-arr": {
 | 
			
		||||
      "version": "1.0.10",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/exclude-arr/-/exclude-arr-1.0.10.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5925,6 +6233,11 @@
 | 
			
		|||
      "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "exit-on-epipe": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
 | 
			
		||||
    },
 | 
			
		||||
    "expand-brackets": {
 | 
			
		||||
      "version": "2.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6139,6 +6452,22 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "extended": {
 | 
			
		||||
      "version": "0.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/extended/-/extended-0.0.6.tgz",
 | 
			
		||||
      "integrity": "sha1-f7i/e52uOXWG5IVwrP1kLHjlBmk=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "extender": "~0.0.5"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "extender": {
 | 
			
		||||
      "version": "0.0.10",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/extender/-/extender-0.0.10.tgz",
 | 
			
		||||
      "integrity": "sha1-WJwHSCvmGhRgttgfnCSqZ+jzJM0=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "declare.js": "~0.0.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "external-editor": {
 | 
			
		||||
      "version": "3.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6219,6 +6548,18 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
 | 
			
		||||
      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
 | 
			
		||||
    },
 | 
			
		||||
    "fast-csv": {
 | 
			
		||||
      "version": "2.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-2.5.0.tgz",
 | 
			
		||||
      "integrity": "sha512-M/9ezLU9/uDwvDZTt9sNFJa0iLDUsbhYJwPtnE0D9MjeuB6DY9wRCyUPZta9iI6cSz5wBWGaUPL61QH8h92cNA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "extended": "0.0.6",
 | 
			
		||||
        "is-extended": "0.0.10",
 | 
			
		||||
        "object-extended": "0.0.7",
 | 
			
		||||
        "safer-buffer": "^2.1.2",
 | 
			
		||||
        "string-extended": "0.0.8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "fast-deep-equal": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6585,6 +6926,11 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
 | 
			
		||||
      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
 | 
			
		||||
    },
 | 
			
		||||
    "frac": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
 | 
			
		||||
    },
 | 
			
		||||
    "fragment-cache": {
 | 
			
		||||
      "version": "0.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6608,6 +6954,11 @@
 | 
			
		|||
        "readable-stream": "^2.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "fs-constants": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
 | 
			
		||||
    },
 | 
			
		||||
    "fs-extra": {
 | 
			
		||||
      "version": "8.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6637,6 +6988,17 @@
 | 
			
		|||
      "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==",
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "fstream": {
 | 
			
		||||
      "version": "1.0.12",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
 | 
			
		||||
      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "graceful-fs": "^4.1.2",
 | 
			
		||||
        "inherits": "~2.0.0",
 | 
			
		||||
        "mkdirp": ">=0.5 0",
 | 
			
		||||
        "rimraf": "2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "function-bind": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -7416,6 +7778,11 @@
 | 
			
		|||
        "safer-buffer": ">= 2.1.2 < 3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "ieee754": {
 | 
			
		||||
      "version": "1.1.13",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
 | 
			
		||||
      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
 | 
			
		||||
    },
 | 
			
		||||
    "ignore": {
 | 
			
		||||
      "version": "4.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -7430,6 +7797,11 @@
 | 
			
		|||
        "minimatch": "^3.0.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "immediate": {
 | 
			
		||||
      "version": "3.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
 | 
			
		||||
      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
 | 
			
		||||
    },
 | 
			
		||||
    "import-fresh": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -7808,6 +8180,14 @@
 | 
			
		|||
      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "is-extended": {
 | 
			
		||||
      "version": "0.0.10",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-extended/-/is-extended-0.0.10.tgz",
 | 
			
		||||
      "integrity": "sha1-JE4UDfdbscmjEG9BL/GC+1NKbWI=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "extended": "~0.0.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "is-extglob": {
 | 
			
		||||
      "version": "2.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -8320,6 +8700,46 @@
 | 
			
		|||
        "array-includes": "^3.0.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "jszip": {
 | 
			
		||||
      "version": "3.2.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz",
 | 
			
		||||
      "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "lie": "~3.3.0",
 | 
			
		||||
        "pako": "~1.0.2",
 | 
			
		||||
        "readable-stream": "~2.3.6",
 | 
			
		||||
        "set-immediate-shim": "~1.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "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=="
 | 
			
		||||
        },
 | 
			
		||||
        "readable-stream": {
 | 
			
		||||
          "version": "2.3.6",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
 | 
			
		||||
          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
 | 
			
		||||
          "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"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "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==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "safe-buffer": "~5.1.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "jwa": {
 | 
			
		||||
      "version": "1.4.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -8400,6 +8820,14 @@
 | 
			
		|||
      "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "lazystream": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "readable-stream": "^2.0.5"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "lcid": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -8495,6 +8923,14 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "lie": {
 | 
			
		||||
      "version": "3.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "immediate": "~3.0.5"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "limit-it": {
 | 
			
		||||
      "version": "3.2.9",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/limit-it/-/limit-it-3.2.9.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -8504,6 +8940,11 @@
 | 
			
		|||
        "typpy": "^2.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "listenercount": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
 | 
			
		||||
    },
 | 
			
		||||
    "load-json-file": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -8590,11 +9031,26 @@
 | 
			
		|||
      "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.defaults": {
 | 
			
		||||
      "version": "4.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
 | 
			
		||||
      "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.difference": {
 | 
			
		||||
      "version": "4.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
 | 
			
		||||
      "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw="
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.escaperegexp": {
 | 
			
		||||
      "version": "4.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
 | 
			
		||||
      "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c="
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.flatten": {
 | 
			
		||||
      "version": "4.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
 | 
			
		||||
      "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.flattendeep": {
 | 
			
		||||
      "version": "4.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -8689,6 +9145,11 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/lodash.trimend/-/lodash.trimend-4.5.1.tgz",
 | 
			
		||||
      "integrity": "sha1-EoBENyhrmMrYmWt5QU4RMAEUCC8="
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.union": {
 | 
			
		||||
      "version": "4.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
 | 
			
		||||
      "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.uniq": {
 | 
			
		||||
      "version": "4.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -8843,6 +9304,11 @@
 | 
			
		|||
        "inherits": "^2.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "mdurl": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
 | 
			
		||||
    },
 | 
			
		||||
    "media-typer": {
 | 
			
		||||
      "version": "0.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -13356,6 +13822,16 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "object-extended": {
 | 
			
		||||
      "version": "0.0.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/object-extended/-/object-extended-0.0.7.tgz",
 | 
			
		||||
      "integrity": "sha1-hP0j9WsVWCrrPoiwXLVdJDLWijM=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "array-extended": "~0.0.4",
 | 
			
		||||
        "extended": "~0.0.3",
 | 
			
		||||
        "is-extended": "~0.0.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "object-keys": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -13698,6 +14174,11 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "pako": {
 | 
			
		||||
      "version": "1.0.10",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
 | 
			
		||||
      "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw=="
 | 
			
		||||
    },
 | 
			
		||||
    "parse-github-url": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -14108,6 +14589,11 @@
 | 
			
		|||
      "integrity": "sha512-cMtPQ1+mhWsMPAJycwUqVYQBL30TrVJnVz8K888WN67mpXMHAHGY53jLgFR2Pr3v3YE8Rz9kxZCB7S7vAfz1iA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "printj": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
 | 
			
		||||
    },
 | 
			
		||||
    "priorityqueuejs": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/priorityqueuejs/-/priorityqueuejs-1.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -14137,6 +14623,21 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
 | 
			
		||||
    },
 | 
			
		||||
    "promish": {
 | 
			
		||||
      "version": "5.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/promish/-/promish-5.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-37xEzvSas6JIYI/BcKh5TwhaqWepI44u/hC+tQStkX1sxMf+L756beESPgSWirxRCPqtXHzosoNzpjLnTnP8FA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "es6-promise": "^3.0.2"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "es6-promise": {
 | 
			
		||||
          "version": "3.3.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
 | 
			
		||||
          "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "prop-types": {
 | 
			
		||||
      "version": "15.7.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -15167,6 +15668,11 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
 | 
			
		||||
    },
 | 
			
		||||
    "set-immediate-shim": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
 | 
			
		||||
    },
 | 
			
		||||
    "set-value": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -15190,6 +15696,11 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "setimmediate": {
 | 
			
		||||
      "version": "1.0.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
 | 
			
		||||
      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
 | 
			
		||||
    },
 | 
			
		||||
    "setprototypeof": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -15825,6 +16336,14 @@
 | 
			
		|||
        "request": "^2.87.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "ssf": {
 | 
			
		||||
      "version": "0.10.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.2.tgz",
 | 
			
		||||
      "integrity": "sha512-rDhAPm9WyIsY8eZEKyE8Qsotb3j/wBdvMWBUsOhJdfhKGLfQidRjiBUV0y/MkyCLiXQ38FG6LWW/VYUtqlIDZQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "frac": "~1.1.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "sshpk": {
 | 
			
		||||
      "version": "1.16.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -15948,6 +16467,17 @@
 | 
			
		|||
        "lodash": "^4.15.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "string-extended": {
 | 
			
		||||
      "version": "0.0.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/string-extended/-/string-extended-0.0.8.tgz",
 | 
			
		||||
      "integrity": "sha1-dBlX3/SHsCcqee7FpE8jnubxfM0=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "array-extended": "~0.0.5",
 | 
			
		||||
        "date-extended": "~0.0.3",
 | 
			
		||||
        "extended": "~0.0.3",
 | 
			
		||||
        "is-extended": "~0.0.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "string-width": {
 | 
			
		||||
      "version": "2.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -15957,6 +16487,11 @@
 | 
			
		|||
        "strip-ansi": "^4.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "string.prototype.repeat": {
 | 
			
		||||
      "version": "0.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz",
 | 
			
		||||
      "integrity": "sha1-q6Nt4I3O5qWjN9SbLqHaGyj8Ds8="
 | 
			
		||||
    },
 | 
			
		||||
    "string_decoder": {
 | 
			
		||||
      "version": "0.10.31",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -16159,6 +16694,51 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "tar-stream": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "bl": "^3.0.0",
 | 
			
		||||
        "end-of-stream": "^1.4.1",
 | 
			
		||||
        "fs-constants": "^1.0.0",
 | 
			
		||||
        "inherits": "^2.0.3",
 | 
			
		||||
        "readable-stream": "^3.1.1"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "bl": {
 | 
			
		||||
          "version": "3.0.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz",
 | 
			
		||||
          "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "readable-stream": "^3.0.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "readable-stream": {
 | 
			
		||||
          "version": "3.4.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
 | 
			
		||||
          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "inherits": "^2.0.3",
 | 
			
		||||
            "string_decoder": "^1.1.1",
 | 
			
		||||
            "util-deprecate": "^1.0.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "safe-buffer": {
 | 
			
		||||
          "version": "5.2.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
 | 
			
		||||
          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
 | 
			
		||||
        },
 | 
			
		||||
        "string_decoder": {
 | 
			
		||||
          "version": "1.3.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
 | 
			
		||||
          "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "safe-buffer": "~5.2.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "tasklist": {
 | 
			
		||||
      "version": "3.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tasklist/-/tasklist-3.1.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -16968,6 +17548,56 @@
 | 
			
		|||
      "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "unzipper": {
 | 
			
		||||
      "version": "0.9.15",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.9.15.tgz",
 | 
			
		||||
      "integrity": "sha512-2aaUvO4RAeHDvOCuEtth7jrHFaCKTSXPqUkXwADaLBzGbgZGzUDccoEdJ5lW+3RmfpOZYNx0Rw6F6PUzM6caIA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "big-integer": "^1.6.17",
 | 
			
		||||
        "binary": "~0.3.0",
 | 
			
		||||
        "bluebird": "~3.4.1",
 | 
			
		||||
        "buffer-indexof-polyfill": "~1.0.0",
 | 
			
		||||
        "duplexer2": "~0.1.4",
 | 
			
		||||
        "fstream": "^1.0.12",
 | 
			
		||||
        "listenercount": "~1.0.1",
 | 
			
		||||
        "readable-stream": "~2.3.6",
 | 
			
		||||
        "setimmediate": "~1.0.4"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "bluebird": {
 | 
			
		||||
          "version": "3.4.7",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
 | 
			
		||||
          "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
 | 
			
		||||
        },
 | 
			
		||||
        "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=="
 | 
			
		||||
        },
 | 
			
		||||
        "readable-stream": {
 | 
			
		||||
          "version": "2.3.6",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
 | 
			
		||||
          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
 | 
			
		||||
          "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"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "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==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "safe-buffer": "~5.1.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "update-notifier": {
 | 
			
		||||
      "version": "2.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -17415,6 +18045,27 @@
 | 
			
		|||
      "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "xlsx": {
 | 
			
		||||
      "version": "0.15.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.15.1.tgz",
 | 
			
		||||
      "integrity": "sha512-z+o4+QPMc32EPboLCzJAz94o0Zyy+8jrmWTsVpfzwknFln9qDO6/HN1KrGGVC4//sGA7dh4R3HA4fhbGIKCDOA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "adler-32": "~1.2.0",
 | 
			
		||||
        "cfb": "^1.1.3",
 | 
			
		||||
        "codepage": "~1.14.0",
 | 
			
		||||
        "commander": "~2.17.1",
 | 
			
		||||
        "crc-32": "~1.2.0",
 | 
			
		||||
        "exit-on-epipe": "~1.0.1",
 | 
			
		||||
        "ssf": "~0.10.2"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "commander": {
 | 
			
		||||
          "version": "2.17.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
 | 
			
		||||
          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "xml-name-validator": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -17580,6 +18231,41 @@
 | 
			
		|||
      "version": "3.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg=="
 | 
			
		||||
    },
 | 
			
		||||
    "zip-stream": {
 | 
			
		||||
      "version": "2.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-ykebHGa2+uzth/R4HZLkZh3XFJzivhVsjJt8bN3GvBzLaqqrUdRacu+c4QtnUgjkkQfsOuNE1JgLKMCPNmkKgg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "archiver-utils": "^2.1.0",
 | 
			
		||||
        "compress-commons": "^2.1.1",
 | 
			
		||||
        "readable-stream": "^3.4.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "readable-stream": {
 | 
			
		||||
          "version": "3.4.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
 | 
			
		||||
          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "inherits": "^2.0.3",
 | 
			
		||||
            "string_decoder": "^1.1.1",
 | 
			
		||||
            "util-deprecate": "^1.0.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "safe-buffer": {
 | 
			
		||||
          "version": "5.2.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
 | 
			
		||||
          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
 | 
			
		||||
        },
 | 
			
		||||
        "string_decoder": {
 | 
			
		||||
          "version": "1.3.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
 | 
			
		||||
          "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "safe-buffer": "~5.2.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,8 +72,10 @@
 | 
			
		|||
    "child_process": "1.0.2",
 | 
			
		||||
    "chokidar": "3.0.0",
 | 
			
		||||
    "cli-spinner": "0.2.10",
 | 
			
		||||
    "commonmark": "^0.29.0",
 | 
			
		||||
    "csv-parse": "4.4.1",
 | 
			
		||||
    "dotenv-extended": "2.4.0",
 | 
			
		||||
    "exceljs": "^1.15.0",
 | 
			
		||||
    "express": "4.16.4",
 | 
			
		||||
    "express-promise-router": "3.0.3",
 | 
			
		||||
    "express-remove-route": "^1.0.0",
 | 
			
		||||
| 
						 | 
				
			
			@ -117,7 +119,8 @@
 | 
			
		|||
    "vbscript-to-typescript": "1.0.8",
 | 
			
		||||
    "wait-until": "0.0.2",
 | 
			
		||||
    "walk-promise": "0.2.0",
 | 
			
		||||
    "winston": "3.2.1"
 | 
			
		||||
    "winston": "3.2.1",
 | 
			
		||||
    "xlsx": "^0.15.1"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@semantic-release/changelog": "3.0.2",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ export class SwitchBotDialog extends IGBDialog {
 | 
			
		|||
        let sec = new SecService();
 | 
			
		||||
        let from = step.context.activity.from.id;
 | 
			
		||||
        const minBoot = GBServer.globals.minInstances[0];
 | 
			
		||||
        await sec.updateCurrentBotId(minBoot.instance.instanceId, from, step.result);
 | 
			
		||||
        await sec.updateCurrentBotId(from, step.result);
 | 
			
		||||
        await step.context.sendActivity(`Opa, vamos lá!`);
 | 
			
		||||
                
 | 
			
		||||
        return await step.next();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,6 +63,12 @@ export class GBConversationalService implements IGBConversationalService {
 | 
			
		|||
    return step.context.activity.locale;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async sendFile(min: GBMinInstance, step: GBDialogStep, url: string): Promise<any> {
 | 
			
		||||
    let mobile = step.context.activity.from.id;
 | 
			
		||||
    min.whatsAppDirectLine.sendFile(mobile, url);
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async sendEvent(step: GBDialogStep, name: string, value: Object): Promise<any> {
 | 
			
		||||
    if (step.context.activity.channelId === 'webchat') {
 | 
			
		||||
      const msg = MessageFactory.text('');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -297,9 +297,6 @@ export class GBDeployer {
 | 
			
		|||
    const packageName = Path.basename(localPath);
 | 
			
		||||
 | 
			
		||||
    const p = await this.getStoragePackageByName(instance.instanceId, packageName);
 | 
			
		||||
    if (p === null) {
 | 
			
		||||
      throw new Error(`Package ${packageName} not found on instance: ${instance.botId}.`);
 | 
			
		||||
    }
 | 
			
		||||
    const packageObject = JSON.parse(Fs.readFileSync(urlJoin(localPath, 'package.json'), 'utf8'));
 | 
			
		||||
 | 
			
		||||
    switch (packageType) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -143,7 +143,8 @@ export class AskDialog extends IGBDialog {
 | 
			
		|||
          await min.userProfile.set(step.context, user);
 | 
			
		||||
 | 
			
		||||
          // Sends the answer to all outputs, including projector.
 | 
			
		||||
          await service.sendAnswer(min.conversationalService, step, resultsA.answer);
 | 
			
		||||
 | 
			
		||||
          await service.sendAnswer(AskDialog.getChannel(step), min.conversationalService, step, resultsA.answer);
 | 
			
		||||
 | 
			
		||||
          // Goes to ask loop, again.
 | 
			
		||||
          return await step.replaceDialog('/ask', { isReturning: true });
 | 
			
		||||
| 
						 | 
				
			
			@ -163,7 +164,7 @@ export class AskDialog extends IGBDialog {
 | 
			
		|||
              await step.context.sendActivity(Messages[locale].wider_answer);
 | 
			
		||||
            }
 | 
			
		||||
            // Sends the answer to all outputs, including projector.
 | 
			
		||||
            await service.sendAnswer(min.conversationalService, step, resultsB.answer);
 | 
			
		||||
            await service.sendAnswer(AskDialog.getChannel(step), min.conversationalService, step, resultsB.answer);
 | 
			
		||||
 | 
			
		||||
            return await step.replaceDialog('/ask', { isReturning: true });
 | 
			
		||||
          } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -178,6 +179,10 @@ export class AskDialog extends IGBDialog {
 | 
			
		|||
    ];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private static getChannel(step): string {
 | 
			
		||||
    return Number.isInteger(step.context.activity.from.id) ? 'whatsapp' : step.context.activity.channelId;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private static getAnswerEventDialog(service: KBService, min: GBMinInstance) {
 | 
			
		||||
    return [
 | 
			
		||||
      async step => {
 | 
			
		||||
| 
						 | 
				
			
			@ -186,7 +191,7 @@ export class AskDialog extends IGBDialog {
 | 
			
		|||
          const question = await service.getQuestionById(min.instance.instanceId, data.questionId);
 | 
			
		||||
          const answer = await service.getAnswerById(min.instance.instanceId, question.answerId);
 | 
			
		||||
          // Sends the answer to all outputs, including projector.
 | 
			
		||||
          await service.sendAnswer(min.conversationalService, step, answer);
 | 
			
		||||
          await service.sendAnswer(AskDialog.getChannel(step), min.conversationalService, step, answer);
 | 
			
		||||
          await step.replaceDialog('/ask', { isReturning: true });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,7 @@
 | 
			
		|||
 * @fileoverview Knowledge base services and logic.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var Excel = require('exceljs');
 | 
			
		||||
const Path = require('path');
 | 
			
		||||
const Fs = require('fs');
 | 
			
		||||
import urlJoin = require('url-join');
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +47,6 @@ const parse = require('bluebird').promisify(require('csv-parse'));
 | 
			
		|||
const { SearchService } = require('azure-search-client');
 | 
			
		||||
 | 
			
		||||
import { GBDialogStep, GBLog, IGBConversationalService, IGBCoreService, IGBInstance } from 'botlib';
 | 
			
		||||
import { AzureSearch } from 'pragmatismo-io-framework';
 | 
			
		||||
import { Sequelize } from 'sequelize-typescript';
 | 
			
		||||
import { AzureDeployerService } from '../../azuredeployer.gbapp/services/AzureDeployerService';
 | 
			
		||||
import { GuaribasPackage } from '../../core.gbapp/models/GBModel';
 | 
			
		||||
| 
						 | 
				
			
			@ -170,16 +170,16 @@ export class KBService {
 | 
			
		|||
        query = `${query} ${text}`;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
    // tslint:disable:no-unsafe-any
 | 
			
		||||
    if (instance.searchKey !== null && GBConfigService.get('STORAGE_DIALECT') === 'mssql') {
 | 
			
		||||
      const client = new SearchService(instance.searchHost.split('.')[0], instance.searchKey );
 | 
			
		||||
      const client = new SearchService(instance.searchHost.split('.')[0], instance.searchKey);
 | 
			
		||||
      const results = await client.indexes.use(instance.searchIndex)
 | 
			
		||||
      .buildQuery()
 | 
			
		||||
      .filter((f) => f.eq('instanceId', instance.instanceId))
 | 
			
		||||
      .search(query)
 | 
			
		||||
      .top(1)
 | 
			
		||||
      .executeQuery();
 | 
			
		||||
        .buildQuery()
 | 
			
		||||
        .filter((f) => f.eq('instanceId', instance.instanceId))
 | 
			
		||||
        .search(query)
 | 
			
		||||
        .top(1)
 | 
			
		||||
        .executeQuery();
 | 
			
		||||
 | 
			
		||||
      const values = results.result.value;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -254,24 +254,22 @@ export class KBService {
 | 
			
		|||
    instanceId: number,
 | 
			
		||||
    packageId: number
 | 
			
		||||
  ): Promise<GuaribasQuestion[]> {
 | 
			
		||||
    const file = Fs.readFileSync(filePath, 'utf8');
 | 
			
		||||
    const opts = {
 | 
			
		||||
      delimiter: '\t'
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    var workbook = new Excel.Workbook();
 | 
			
		||||
    let data = await workbook.xlsx.readFile(filePath);
 | 
			
		||||
 | 
			
		||||
    let lastQuestionId: number;
 | 
			
		||||
    let lastAnswer: GuaribasAnswer;
 | 
			
		||||
    let rows = data._worksheets[1]._rows;
 | 
			
		||||
 | 
			
		||||
    const data = await parse(file, opts);
 | 
			
		||||
 | 
			
		||||
    return asyncPromise.eachSeries(data, async line => {
 | 
			
		||||
    return asyncPromise.eachSeries(rows, async line => {
 | 
			
		||||
      // Extracts values from columns in the current line.
 | 
			
		||||
 | 
			
		||||
      const subjectsText = line[0];
 | 
			
		||||
      const from = line[1];
 | 
			
		||||
      const to = line[2];
 | 
			
		||||
      const question = line[3];
 | 
			
		||||
      let answer = line[4];
 | 
			
		||||
      const subjectsText = line._cells[0].value;
 | 
			
		||||
      const from = line._cells[1].value;
 | 
			
		||||
      const to = line._cells[2].value;
 | 
			
		||||
      const question = line._cells[3].value;
 | 
			
		||||
      let answer = line._cells[4].value;
 | 
			
		||||
 | 
			
		||||
      // Skips the first line.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -351,34 +349,38 @@ export class KBService {
 | 
			
		|||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async sendAnswer(conversationalService: IGBConversationalService, step: GBDialogStep, answer: GuaribasAnswer) {
 | 
			
		||||
  public async sendAnswer(channel: string, conversationalService: IGBConversationalService, step: GBDialogStep, answer: GuaribasAnswer) {
 | 
			
		||||
    if (answer.content.endsWith('.mp4')) {
 | 
			
		||||
      await conversationalService.sendEvent(step, 'play', {
 | 
			
		||||
        playerType: 'video',
 | 
			
		||||
        data: answer.content
 | 
			
		||||
      });
 | 
			
		||||
    } else if (answer.content.length > 140 &&
 | 
			
		||||
      step.context.activity.channelId === 'webchat' &&
 | 
			
		||||
      await this.playVideo(conversationalService, step, answer);
 | 
			
		||||
    }
 | 
			
		||||
    else if (answer.format === '.md') {
 | 
			
		||||
 | 
			
		||||
      await this.playMarkdown(answer, channel, step, conversationalService);
 | 
			
		||||
 | 
			
		||||
    } else {
 | 
			
		||||
      await step.context.sendActivity(answer.content);
 | 
			
		||||
      await conversationalService.sendEvent(step, 'stop', undefined);
 | 
			
		||||
    }
 | 
			
		||||
  } 
 | 
			
		||||
 | 
			
		||||
  private async playMarkdown(answer: GuaribasAnswer, channel: string, step: GBDialogStep, conversationalService: IGBConversationalService) {
 | 
			
		||||
    let html = answer.content;
 | 
			
		||||
    marked.setOptions({
 | 
			
		||||
      renderer: new marked.Renderer(),
 | 
			
		||||
      gfm: true,
 | 
			
		||||
      tables: true,
 | 
			
		||||
      breaks: false,
 | 
			
		||||
      pedantic: false,
 | 
			
		||||
      sanitize: false,
 | 
			
		||||
      smartLists: true,
 | 
			
		||||
      smartypants: false,
 | 
			
		||||
      xhtml: false
 | 
			
		||||
    });
 | 
			
		||||
    html = marked(answer.content);
 | 
			
		||||
    if (channel === 'webchat' &&
 | 
			
		||||
      GBConfigService.get('DISABLE_WEB') !== 'true') {
 | 
			
		||||
      const locale = step.context.activity.locale;
 | 
			
		||||
 | 
			
		||||
      await step.context.sendActivity(Messages[locale].will_answer_projector);
 | 
			
		||||
      let html = answer.content;
 | 
			
		||||
 | 
			
		||||
      if (answer.format === '.md') {
 | 
			
		||||
        marked.setOptions({
 | 
			
		||||
          renderer: new marked.Renderer(),
 | 
			
		||||
          gfm: true,
 | 
			
		||||
          tables: true,
 | 
			
		||||
          breaks: false,
 | 
			
		||||
          pedantic: false,
 | 
			
		||||
          sanitize: false,
 | 
			
		||||
          smartLists: true,
 | 
			
		||||
          smartypants: false,
 | 
			
		||||
          xhtml: false
 | 
			
		||||
        });
 | 
			
		||||
        html = marked(answer.content);
 | 
			
		||||
      }
 | 
			
		||||
      await conversationalService.sendEvent(step, 'play', {
 | 
			
		||||
        playerType: 'markdown',
 | 
			
		||||
        data: {
 | 
			
		||||
| 
						 | 
				
			
			@ -388,81 +390,89 @@ export class KBService {
 | 
			
		|||
          nextId: answer.nextId
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    } else {
 | 
			
		||||
      await step.context.sendActivity(answer.content);
 | 
			
		||||
      await conversationalService.sendEvent(step, 'stop', undefined);
 | 
			
		||||
    }
 | 
			
		||||
    else if (channel === 'whatsapp') {
 | 
			
		||||
      let from = step.context.activity.from.id;
 | 
			
		||||
      //conversationalService.sendFile(min, from, answer.content);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
private async playVideo(conversationalService: IGBConversationalService, step: GBDialogStep, answer: GuaribasAnswer) {
 | 
			
		||||
    await conversationalService.sendEvent(step, 'play', {
 | 
			
		||||
      playerType: 'video',
 | 
			
		||||
      data: answer.content
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async importKbPackage(
 | 
			
		||||
    localPath: string,
 | 
			
		||||
    packageStorage: GuaribasPackage,
 | 
			
		||||
    instance: IGBInstance
 | 
			
		||||
  ): Promise<any> {
 | 
			
		||||
    // Imports subjects tree into database and return it.
 | 
			
		||||
  localPath: string,
 | 
			
		||||
  packageStorage: GuaribasPackage,
 | 
			
		||||
  instance: IGBInstance
 | 
			
		||||
): Promise < any > {
 | 
			
		||||
  // Imports subjects tree into database and return it.
 | 
			
		||||
 | 
			
		||||
    await this.importSubjectFile(packageStorage.packageId, urlJoin(localPath, 'subjects.json'), instance);
 | 
			
		||||
  await this.importSubjectFile(packageStorage.packageId, urlJoin(localPath, 'subjects.json'), instance);
 | 
			
		||||
 | 
			
		||||
    // Import all .tsv files in the tabular directory.
 | 
			
		||||
  // Import all .tsv files in the tabular directory.
 | 
			
		||||
 | 
			
		||||
    return this.importKbTabularDirectory(localPath, instance, packageStorage.packageId);
 | 
			
		||||
  }
 | 
			
		||||
  return this.importKbTabularDirectory(localPath, instance, packageStorage.packageId);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  public async importKbTabularDirectory(localPath: string, instance: IGBInstance, packageId: number): Promise<any> {
 | 
			
		||||
    const files = await walkPromise(urlJoin(localPath, 'tabular'));
 | 
			
		||||
  public async importKbTabularDirectory(localPath: string, instance: IGBInstance, packageId: number): Promise < any > {
 | 
			
		||||
  const files = await walkPromise(urlJoin(localPath, 'tabular'));
 | 
			
		||||
 | 
			
		||||
    return Promise.all(
 | 
			
		||||
      files.map(async file => {
 | 
			
		||||
        if (file.name.endsWith('.tsv')) {
 | 
			
		||||
          return this.importKbTabularFile(urlJoin(file.root, file.name), instance.instanceId, packageId);
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
  return Promise.all(
 | 
			
		||||
    files.map(async file => {
 | 
			
		||||
      if (file.name.endsWith('.xlsx')) {
 | 
			
		||||
        return this.importKbTabularFile(urlJoin(file.root, file.name), instance.instanceId, packageId);
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  public async importSubjectFile(packageId: number, filename: string, instance: IGBInstance): Promise<any> {
 | 
			
		||||
    const subjectsLoaded = JSON.parse(Fs.readFileSync(filename, 'utf8'));
 | 
			
		||||
  public async importSubjectFile(packageId: number, filename: string, instance: IGBInstance): Promise < any > {
 | 
			
		||||
  const subjectsLoaded = JSON.parse(Fs.readFileSync(filename, 'utf8'));
 | 
			
		||||
 | 
			
		||||
    const doIt = async (subjects: GuaribasSubject[], parentSubjectId: number) => {
 | 
			
		||||
      return asyncPromise.eachSeries(subjects, async item => {
 | 
			
		||||
        const value = await GuaribasSubject.create({
 | 
			
		||||
          internalId: item.id,
 | 
			
		||||
          parentSubjectId: parentSubjectId,
 | 
			
		||||
          instanceId: instance.instanceId,
 | 
			
		||||
          from: item.from,
 | 
			
		||||
          to: item.to,
 | 
			
		||||
          title: item.title,
 | 
			
		||||
          description: item.description,
 | 
			
		||||
          packageId: packageId
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        if (item.children) {
 | 
			
		||||
          return Promise.resolve(doIt(item.children, value.subjectId));
 | 
			
		||||
        } else {
 | 
			
		||||
          return Promise.resolve(item);
 | 
			
		||||
        }
 | 
			
		||||
  const doIt = async (subjects: GuaribasSubject[], parentSubjectId: number) => {
 | 
			
		||||
    return asyncPromise.eachSeries(subjects, async item => {
 | 
			
		||||
      const value = await GuaribasSubject.create({
 | 
			
		||||
        internalId: item.id,
 | 
			
		||||
        parentSubjectId: parentSubjectId,
 | 
			
		||||
        instanceId: instance.instanceId,
 | 
			
		||||
        from: item.from,
 | 
			
		||||
        to: item.to,
 | 
			
		||||
        title: item.title,
 | 
			
		||||
        description: item.description,
 | 
			
		||||
        packageId: packageId
 | 
			
		||||
      });
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return doIt(subjectsLoaded.children, undefined);
 | 
			
		||||
  }
 | 
			
		||||
      if (item.children) {
 | 
			
		||||
        return Promise.resolve(doIt(item.children, value.subjectId));
 | 
			
		||||
      } else {
 | 
			
		||||
        return Promise.resolve(item);
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return doIt(subjectsLoaded.children, undefined);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  public async undeployKbFromStorage(instance: IGBInstance, deployer: GBDeployer, packageId: number) {
 | 
			
		||||
    await GuaribasQuestion.destroy({
 | 
			
		||||
      where: { instanceId: instance.instanceId, packageId: packageId }
 | 
			
		||||
    });
 | 
			
		||||
    await GuaribasAnswer.destroy({
 | 
			
		||||
      where: { instanceId: instance.instanceId, packageId: packageId }
 | 
			
		||||
    });
 | 
			
		||||
    await GuaribasSubject.destroy({
 | 
			
		||||
      where: { instanceId: instance.instanceId, packageId: packageId }
 | 
			
		||||
    });
 | 
			
		||||
    await GuaribasPackage.destroy({
 | 
			
		||||
      where: { instanceId: instance.instanceId, packageId: packageId }
 | 
			
		||||
    });
 | 
			
		||||
  await GuaribasQuestion.destroy({
 | 
			
		||||
    where: { instanceId: instance.instanceId, packageId: packageId }
 | 
			
		||||
  });
 | 
			
		||||
  await GuaribasAnswer.destroy({
 | 
			
		||||
    where: { instanceId: instance.instanceId, packageId: packageId }
 | 
			
		||||
  });
 | 
			
		||||
  await GuaribasSubject.destroy({
 | 
			
		||||
    where: { instanceId: instance.instanceId, packageId: packageId }
 | 
			
		||||
  });
 | 
			
		||||
  await GuaribasPackage.destroy({
 | 
			
		||||
    where: { instanceId: instance.instanceId, packageId: packageId }
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
    await deployer.rebuildIndex(instance, new AzureDeployerService(deployer).getKBSearchSchema(instance.searchIndex));
 | 
			
		||||
  }
 | 
			
		||||
  await deployer.rebuildIndex(instance, new AzureDeployerService(deployer).getKBSearchSchema(instance.searchIndex));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Deploys a knowledge base to the storage using the .gbkb format.
 | 
			
		||||
| 
						 | 
				
			
			@ -470,17 +480,17 @@ export class KBService {
 | 
			
		|||
   * @param localPath Path to the .gbkb folder.
 | 
			
		||||
   */
 | 
			
		||||
  public async deployKb(core: IGBCoreService, deployer: GBDeployer, localPath: string) {
 | 
			
		||||
    const packageType = Path.extname(localPath);
 | 
			
		||||
    const packageName = Path.basename(localPath);
 | 
			
		||||
    GBLog.info(`[GBDeployer] Opening package: ${localPath}`);
 | 
			
		||||
    const packageObject = JSON.parse(Fs.readFileSync(urlJoin(localPath, 'package.json'), 'utf8'));
 | 
			
		||||
  const packageType = Path.extname(localPath);
 | 
			
		||||
  const packageName = Path.basename(localPath);
 | 
			
		||||
  GBLog.info(`[GBDeployer] Opening package: ${localPath}`);
 | 
			
		||||
  const packageObject = JSON.parse(Fs.readFileSync(urlJoin(localPath, 'package.json'), 'utf8'));
 | 
			
		||||
 | 
			
		||||
    const instance = await core.loadInstance(packageObject.botId);
 | 
			
		||||
    GBLog.info(`[GBDeployer] Importing: ${localPath}`);
 | 
			
		||||
    const p = await deployer.deployPackageToStorage(instance.instanceId, packageName);
 | 
			
		||||
    await this.importKbPackage(localPath, p, instance);
 | 
			
		||||
  const instance = await core.loadInstance(packageObject.botId);
 | 
			
		||||
  GBLog.info(`[GBDeployer] Importing: ${localPath}`);
 | 
			
		||||
  const p = await deployer.deployPackageToStorage(instance.instanceId, packageName);
 | 
			
		||||
  await this.importKbPackage(localPath, p, instance);
 | 
			
		||||
 | 
			
		||||
    deployer.rebuildIndex(instance, new AzureDeployerService(deployer).getKBSearchSchema(instance.searchIndex));
 | 
			
		||||
    GBLog.info(`[GBDeployer] Finished import of ${localPath}`);
 | 
			
		||||
  }
 | 
			
		||||
  deployer.rebuildIndex(instance, new AzureDeployerService(deployer).getKBSearchSchema(instance.searchIndex));
 | 
			
		||||
  GBLog.info(`[GBDeployer] Finished import of ${localPath}`);
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -231,6 +231,30 @@ export class WhatsappDirectLine extends GBService {
 | 
			
		|||
    return `${attachment.content.title} - ${attachment.content.text}`;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async sendFileToDevice(to, url) {
 | 
			
		||||
    const options = {
 | 
			
		||||
      method: 'POST',
 | 
			
		||||
      url: urlJoin(this.whatsappServiceUrl, 'sendFile'),
 | 
			
		||||
      qs: {
 | 
			
		||||
        token: this.whatsappServiceKey,
 | 
			
		||||
        phone: to,
 | 
			
		||||
        body: url
 | 
			
		||||
      },
 | 
			
		||||
      headers: {
 | 
			
		||||
        'cache-control': 'no-cache'
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      // tslint:disable-next-line: await-promise
 | 
			
		||||
      const result = await request.post(options);
 | 
			
		||||
      GBLog.info(result);
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
      GBLog.error(`Error sending message to Whatsapp provider ${error.message}`);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  public async sendToDevice(to, msg) {
 | 
			
		||||
    const options = {
 | 
			
		||||
      method: 'POST',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue