still gets better
This commit is contained in:
Generated
+267
-9
@@ -52,6 +52,41 @@
|
|||||||
"tslib": "^1.9.0"
|
"tslib": "^1.9.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@sindresorhus/df": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-2.1.0.tgz",
|
||||||
|
"integrity": "sha1-0gjPJ+BvC7R20U197M19cm6ao4k=",
|
||||||
|
"requires": {
|
||||||
|
"execa": "^0.2.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"execa": {
|
||||||
|
"version": "0.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz",
|
||||||
|
"integrity": "sha1-4urUcsLDGq1vc/GslW7vReEjIMs=",
|
||||||
|
"requires": {
|
||||||
|
"cross-spawn-async": "^2.1.1",
|
||||||
|
"npm-run-path": "^1.0.0",
|
||||||
|
"object-assign": "^4.0.1",
|
||||||
|
"path-key": "^1.0.0",
|
||||||
|
"strip-eof": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"npm-run-path": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=",
|
||||||
|
"requires": {
|
||||||
|
"path-key": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path-key": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/body-parser": {
|
"@types/body-parser": {
|
||||||
"version": "1.17.1",
|
"version": "1.17.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz",
|
||||||
@@ -478,6 +513,19 @@
|
|||||||
"resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
|
||||||
"integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
|
"integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
|
||||||
},
|
},
|
||||||
|
"array-union": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
|
||||||
|
"requires": {
|
||||||
|
"array-uniq": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"array-uniq": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
|
||||||
|
},
|
||||||
"array-unique": {
|
"array-unique": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
|
||||||
@@ -1195,6 +1243,25 @@
|
|||||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||||
},
|
},
|
||||||
|
"cp-file": {
|
||||||
|
"version": "6.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz",
|
||||||
|
"integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==",
|
||||||
|
"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"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"pify": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"create-ecdh": {
|
"create-ecdh": {
|
||||||
"version": "4.0.3",
|
"version": "4.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
|
||||||
@@ -1241,6 +1308,15 @@
|
|||||||
"which": "^1.2.9"
|
"which": "^1.2.9"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"cross-spawn-async": {
|
||||||
|
"version": "2.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz",
|
||||||
|
"integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=",
|
||||||
|
"requires": {
|
||||||
|
"lru-cache": "^4.0.0",
|
||||||
|
"which": "^1.2.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"crypto-browserify": {
|
"crypto-browserify": {
|
||||||
"version": "3.12.0",
|
"version": "3.12.0",
|
||||||
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
|
||||||
@@ -1397,6 +1473,14 @@
|
|||||||
"randombytes": "^2.0.0"
|
"randombytes": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dir-glob": {
|
||||||
|
"version": "2.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
|
||||||
|
"integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
|
||||||
|
"requires": {
|
||||||
|
"path-type": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"domain-browser": {
|
"domain-browser": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
|
||||||
@@ -2780,6 +2864,19 @@
|
|||||||
"which": "^1.2.14"
|
"which": "^1.2.14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"globby": {
|
||||||
|
"version": "7.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
|
||||||
|
"integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
|
||||||
|
"requires": {
|
||||||
|
"array-union": "^1.0.1",
|
||||||
|
"dir-glob": "^2.0.0",
|
||||||
|
"glob": "^7.1.2",
|
||||||
|
"ignore": "^3.3.5",
|
||||||
|
"pify": "^3.0.0",
|
||||||
|
"slash": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"graceful-fs": {
|
"graceful-fs": {
|
||||||
"version": "4.2.2",
|
"version": "4.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
|
||||||
@@ -2931,6 +3028,11 @@
|
|||||||
"integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
|
"integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"ignore": {
|
||||||
|
"version": "3.3.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
|
||||||
|
"integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug=="
|
||||||
|
},
|
||||||
"ignore-walk": {
|
"ignore-walk": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
|
||||||
@@ -3131,6 +3233,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"is-path-inside": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
|
||||||
|
"requires": {
|
||||||
|
"path-is-inside": "^1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"is-plain-object": {
|
"is-plain-object": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
|
||||||
@@ -3431,7 +3541,6 @@
|
|||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
|
||||||
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
|
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"pify": "^4.0.1",
|
"pify": "^4.0.1",
|
||||||
"semver": "^5.6.0"
|
"semver": "^5.6.0"
|
||||||
@@ -3440,8 +3549,7 @@
|
|||||||
"pify": {
|
"pify": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
|
||||||
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
|
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
|
||||||
"dev": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -3683,6 +3791,28 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mount-point": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-Zly57evoDREOZY21bDHQrvUaj5c=",
|
||||||
|
"requires": {
|
||||||
|
"@sindresorhus/df": "^1.0.1",
|
||||||
|
"pify": "^2.3.0",
|
||||||
|
"pinkie-promise": "^2.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@sindresorhus/df": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-xptm9S9vzdKHyAffIQMF2694UA0="
|
||||||
|
},
|
||||||
|
"pify": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||||
|
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"move-concurrently": {
|
"move-concurrently": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
|
||||||
@@ -3708,6 +3838,31 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"move-file": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/move-file/-/move-file-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-USHrRmxzGowUWAGBbJPdFjHzEqtxDU03pLHY0Rfqgtnq+q8FOIs8wvkkf+Udmg77SJKs47y9sI0jJvQeYsmiCA==",
|
||||||
|
"requires": {
|
||||||
|
"cp-file": "^6.1.0",
|
||||||
|
"make-dir": "^3.0.0",
|
||||||
|
"path-exists": "^3.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"make-dir": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==",
|
||||||
|
"requires": {
|
||||||
|
"semver": "^6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"version": "6.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"ms": {
|
"ms": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
@@ -3783,6 +3938,11 @@
|
|||||||
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
|
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
|
||||||
"dev": true
|
"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=="
|
||||||
|
},
|
||||||
"nice-try": {
|
"nice-try": {
|
||||||
"version": "1.0.5",
|
"version": "1.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
|
||||||
@@ -4090,11 +4250,15 @@
|
|||||||
"p-limit": "^2.0.0"
|
"p-limit": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"p-map": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="
|
||||||
|
},
|
||||||
"p-try": {
|
"p-try": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
||||||
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
|
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"packet-reader": {
|
"packet-reader": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@@ -4181,14 +4345,18 @@
|
|||||||
"path-exists": {
|
"path-exists": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
|
||||||
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
|
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"path-is-absolute": {
|
"path-is-absolute": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
|
"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="
|
||||||
|
},
|
||||||
"path-key": {
|
"path-key": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
|
||||||
@@ -4218,6 +4386,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
||||||
},
|
},
|
||||||
|
"path-type": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
|
||||||
|
"requires": {
|
||||||
|
"pify": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"pbkdf2": {
|
"pbkdf2": {
|
||||||
"version": "3.0.17",
|
"version": "3.0.17",
|
||||||
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
|
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
|
||||||
@@ -4315,6 +4491,19 @@
|
|||||||
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
||||||
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
|
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
|
||||||
},
|
},
|
||||||
|
"pinkie": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
|
||||||
|
"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
|
||||||
|
},
|
||||||
|
"pinkie-promise": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
|
||||||
|
"requires": {
|
||||||
|
"pinkie": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"pkg-dir": {
|
"pkg-dir": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
|
||||||
@@ -4909,6 +5098,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"slash": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
|
||||||
|
},
|
||||||
"snapdragon": {
|
"snapdragon": {
|
||||||
"version": "0.8.2",
|
"version": "0.8.2",
|
||||||
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
||||||
@@ -5250,8 +5444,7 @@
|
|||||||
"strip-eof": {
|
"strip-eof": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
|
||||||
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
|
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"strip-json-comments": {
|
"strip-json-comments": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
@@ -5421,6 +5614,36 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"trash": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/trash/-/trash-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-5/ZF/7yPYX9Q8e4Dop2WMClV8VRJiWybUV2FhPovkm0I2csNlmY2DXpcCa50UObXx2+SE6421ViTa4sTpEA4WA==",
|
||||||
|
"requires": {
|
||||||
|
"globby": "^7.1.1",
|
||||||
|
"is-path-inside": "^2.0.0",
|
||||||
|
"make-dir": "^3.0.0",
|
||||||
|
"move-file": "^1.1.0",
|
||||||
|
"p-map": "^2.0.0",
|
||||||
|
"p-try": "^2.2.0",
|
||||||
|
"uuid": "^3.3.2",
|
||||||
|
"xdg-trashdir": "^2.1.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"make-dir": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==",
|
||||||
|
"requires": {
|
||||||
|
"semver": "^6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"version": "6.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"ts-loader": {
|
"ts-loader": {
|
||||||
"version": "5.4.5",
|
"version": "5.4.5",
|
||||||
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz",
|
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz",
|
||||||
@@ -5601,6 +5824,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
|
||||||
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
|
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
|
||||||
},
|
},
|
||||||
|
"user-home": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
|
||||||
|
"requires": {
|
||||||
|
"os-homedir": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"version": "0.10.4",
|
"version": "0.10.4",
|
||||||
"resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
|
"resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
|
||||||
@@ -5825,6 +6056,33 @@
|
|||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||||
},
|
},
|
||||||
|
"xdg-basedir": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=",
|
||||||
|
"requires": {
|
||||||
|
"os-homedir": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"xdg-trashdir": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/xdg-trashdir/-/xdg-trashdir-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-KcVhPaOu2ZurYNHSRTf1+ZHORkTZGCQ+u0JHN17QixRISJq4pXOnjt/lQcehvtHL5QAKhSzKgyjrcNnPdkPBHA==",
|
||||||
|
"requires": {
|
||||||
|
"@sindresorhus/df": "^2.1.0",
|
||||||
|
"mount-point": "^3.0.0",
|
||||||
|
"pify": "^2.2.0",
|
||||||
|
"user-home": "^2.0.0",
|
||||||
|
"xdg-basedir": "^2.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"pify": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||||
|
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"xtend": {
|
"xtend": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
"rimraf": "^3.0.0",
|
"rimraf": "^3.0.0",
|
||||||
"simple-git": "^1.124.0",
|
"simple-git": "^1.124.0",
|
||||||
"spawn-sync": "^2.0.0",
|
"spawn-sync": "^2.0.0",
|
||||||
|
"trash": "^6.0.0",
|
||||||
"uuid": "^3.3.2"
|
"uuid": "^3.3.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
+116
-84
@@ -9,6 +9,8 @@ import { FrontblockAdmin } from "./FrontblockAdmin";
|
|||||||
import { TableDefiniton } from "frontblock-generic/Admin";
|
import { TableDefiniton } from "frontblock-generic/Admin";
|
||||||
import { promises as fs, mkdirSync as mkdir } from "fs"
|
import { promises as fs, mkdirSync as mkdir } from "fs"
|
||||||
import { version } from "punycode";
|
import { version } from "punycode";
|
||||||
|
import * as git from "simple-git/promise"
|
||||||
|
import * as trash from "trash"
|
||||||
|
|
||||||
var exec = require('child-process-promise').exec;
|
var exec = require('child-process-promise').exec;
|
||||||
|
|
||||||
@@ -45,8 +47,8 @@ const SharedStatus = <Status>
|
|||||||
|
|
||||||
type SharedStatus = {
|
type SharedStatus = {
|
||||||
name: string
|
name: string
|
||||||
installed: boolean
|
installed?: boolean
|
||||||
outdated: boolean
|
outdated?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class Extension<Status extends SharedStatus>{
|
abstract class Extension<Status extends SharedStatus>{
|
||||||
@@ -55,80 +57,91 @@ abstract class Extension<Status extends SharedStatus>{
|
|||||||
){}
|
){}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* promises the generic Status object
|
* the generic Status object
|
||||||
*/
|
*/
|
||||||
abstract async status():Promise<Status>
|
protected async status():Promise<Status>{
|
||||||
|
const installed = await this.isInstalled()
|
||||||
|
const outdated = await this.isOutdated()
|
||||||
|
return <Status>{ name: this.name, installed: installed, outdated: outdated }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* promises a boolean.
|
* true => extension was installed
|
||||||
* true => isInstalled should be true afterwards
|
* false => extension was not install
|
||||||
* false => an error happend and nothing was installed
|
* undefined => signals error
|
||||||
*/
|
*/
|
||||||
abstract async install():Promise<boolean>
|
abstract async install():Promise<boolean | undefined>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* promises a boolean.
|
* reverts the install procedure
|
||||||
* true => isInstalled should be false afterwards
|
|
||||||
* false => the function was not able to bring this plugin into an uninstalled state!!!
|
|
||||||
*/
|
*/
|
||||||
abstract async uninstall():Promise<boolean>
|
abstract async uninstall():Promise<void>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* promises a boolean.
|
|
||||||
* true => an update was performed
|
* true => an update was performed
|
||||||
* false => no update was performed
|
* false => no update was performed
|
||||||
|
* undefined => signals error
|
||||||
*/
|
*/
|
||||||
abstract async update(): Promise<boolean>
|
abstract async update(force?: boolean): Promise<boolean | undefined>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* promises a boolean
|
|
||||||
* true => update would install a newer version
|
* true => update would install a newer version
|
||||||
* false => nothing would happen if update would be called
|
* false => nothing would be updated if update would be performed
|
||||||
|
* undefined => signals error
|
||||||
*/
|
*/
|
||||||
abstract async isOutdated():Promise<boolean>
|
abstract async isOutdated():Promise<boolean | undefined>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* promises a boolean
|
* promises a boolean
|
||||||
* true => install would do nothing would it be called
|
* true => install would do nothing would it be called
|
||||||
* false => install would try to install the newest extension
|
* false => install would try to install the newest extension
|
||||||
|
* undefined => signals error
|
||||||
*/
|
*/
|
||||||
abstract async isInstalled():Promise<boolean>
|
abstract async isInstalled():Promise<boolean | undefined>
|
||||||
}
|
}
|
||||||
|
|
||||||
export type FSStatus = SharedStatus & {
|
export type FSStatus = SharedStatus & {
|
||||||
prefix: string
|
prefix: string
|
||||||
empty: boolean
|
empty?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export abstract class FSExtension<Status extends FSStatus> extends Extension<FSStatus>{
|
export abstract class FSExtension<Status extends FSStatus> extends Extension<Status>{
|
||||||
constructor(
|
constructor(
|
||||||
name: string,
|
name: string,
|
||||||
protected readonly prefix: string){
|
protected readonly prefix: string){
|
||||||
super(name)
|
super(name)
|
||||||
logger.debug('Creating extension directory', path.resolve(prefix, name))
|
|
||||||
mkdir(path.resolve(prefix, name))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async status(): Promise<Status | FSStatus>{
|
public async status(): Promise<Status>{
|
||||||
const installed = await this.isInstalled()
|
const shdStatus = await super.status()
|
||||||
const outdated = await this.isOutdated()
|
|
||||||
const empty = await this.isEmpty()
|
const empty = await this.isEmpty()
|
||||||
return {
|
return <Status>{...shdStatus, prefix: this.prefix, empty: empty}
|
||||||
name: this.name,
|
|
||||||
prefix: this.prefix,
|
|
||||||
installed: installed,
|
|
||||||
outdated: outdated,
|
|
||||||
empty: empty
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async uninstall(): Promise<boolean>{
|
public async install():Promise<boolean>{
|
||||||
return await rmrf(path.resolve(this.prefix, this.name))
|
const installed = await this.isInstalled()
|
||||||
|
if (!installed) {
|
||||||
|
logger.info('Installing extension to', path.resolve(this.prefix, this.name))
|
||||||
|
mkdir(path.resolve(this.prefix, this.name), {recursive: true})
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
logger.warn('Extension already installed at', path.resolve(this.prefix, this.name))
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
public async isEmpty(): Promise<boolean>{
|
public async uninstall(): Promise<void>{
|
||||||
if (!this.isInstalled) return false
|
logger.info('Uninstalling extension from', path.resolve(this.prefix, this.name))
|
||||||
else {
|
return await trash(path.resolve(this.prefix, this.name))
|
||||||
const files = await fs.readdir(this.prefix)
|
}
|
||||||
|
|
||||||
|
public async isEmpty(): Promise<boolean | undefined>{
|
||||||
|
if (!this.isInstalled()) return true
|
||||||
|
try {
|
||||||
|
const files = await fs.readdir(path.resolve(this.prefix, this.name))
|
||||||
return files.length === 0
|
return files.length === 0
|
||||||
|
} catch (error) {
|
||||||
|
logger.warn('TODO')
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,28 +172,8 @@ export class NPMExtension extends FSExtension<NPMStatus>{
|
|||||||
public async status(): Promise<NPMStatus> {
|
public async status(): Promise<NPMStatus> {
|
||||||
|
|
||||||
const fsStatus = await super.status()
|
const fsStatus = await super.status()
|
||||||
const {
|
const latest = await this.getLatest()
|
||||||
latestError,
|
const author = await this.getAuthor()
|
||||||
latest,
|
|
||||||
latestStdErr } = await exec('npm view --prefix ' + this.prefix + ' ' + this.name + " version")
|
|
||||||
|
|
||||||
if(latestError){
|
|
||||||
logger.warn(latestStdErr)
|
|
||||||
return fsStatus
|
|
||||||
}
|
|
||||||
|
|
||||||
const {
|
|
||||||
authorError,
|
|
||||||
author,
|
|
||||||
authorStdErr } = await exec('npm author ls --prefix ' + this.prefix + ' ' + this.name)
|
|
||||||
|
|
||||||
if(authorError){
|
|
||||||
logger.warn(authorStdErr)
|
|
||||||
return {
|
|
||||||
...fsStatus,
|
|
||||||
latest: latest}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...fsStatus,
|
...fsStatus,
|
||||||
latest: latest,
|
latest: latest,
|
||||||
@@ -189,6 +182,7 @@ export class NPMExtension extends FSExtension<NPMStatus>{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async install(): Promise<boolean> {
|
public async install(): Promise<boolean> {
|
||||||
|
super.install()
|
||||||
logger.info("npm install", this.name, 'to', path.resolve(this.prefix, this.name))
|
logger.info("npm install", this.name, 'to', path.resolve(this.prefix, this.name))
|
||||||
const { error, stdout, stderr } = await exec('npm install --prefix '+ this.prefix + ' ' + this.name)
|
const { error, stdout, stderr } = await exec('npm install --prefix '+ this.prefix + ' ' + this.name)
|
||||||
if (error !== null) {
|
if (error !== null) {
|
||||||
@@ -200,22 +194,21 @@ export class NPMExtension extends FSExtension<NPMStatus>{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async uninstall(): Promise<boolean> {
|
public async uninstall(): Promise<void> {
|
||||||
|
super.uninstall()
|
||||||
logger.info("npm uninstall", this.name, 'from', path.resolve(this.prefix, this.name))
|
logger.info("npm uninstall", this.name, 'from', path.resolve(this.prefix, this.name))
|
||||||
const { error, stdout, stderr } = await exec('npm uninstall --prefix '+ this.prefix + ' ' + this.name)
|
const { error, stdout, stderr } = await exec('npm uninstall --prefix '+ this.prefix + ' ' + this.name)
|
||||||
if (error !== null) {
|
if (error) {
|
||||||
logger.warn('npm uninstall', this.name, 'from prefix', this.prefix, 'stderr:', stderr)
|
logger.warn('npm uninstall', this.name, 'from prefix', this.prefix, 'stderr:', stderr)
|
||||||
return false
|
|
||||||
} else {
|
} else {
|
||||||
logger.info('npm uninstall', this.name, 'from prefix', this.prefix, 'stdout:', stdout)
|
logger.info('npm uninstall', this.name, 'from prefix', this.prefix, 'stdout:', stdout)
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async update(): Promise<boolean> {
|
public async update(): Promise<boolean> {
|
||||||
logger.info("npm update", path.resolve(this.prefix, this.name))
|
logger.info("npm update", path.resolve(this.prefix, this.name))
|
||||||
const { error, stdout, stderr } = await exec('npm update --prefix '+ this.prefix + ' ' + this.name)
|
const { error, stdout, stderr } = await exec('npm update --prefix '+ this.prefix + ' ' + this.name)
|
||||||
if (error !== null) {
|
if (error) {
|
||||||
logger.warn('npm update', this.name, 'from prefix', this.prefix, 'stderr:', stderr)
|
logger.warn('npm update', this.name, 'from prefix', this.prefix, 'stderr:', stderr)
|
||||||
return false
|
return false
|
||||||
} else {
|
} else {
|
||||||
@@ -224,26 +217,48 @@ export class NPMExtension extends FSExtension<NPMStatus>{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async isOutdated(): Promise<boolean> {
|
public async isOutdated(): Promise<boolean | undefined> {
|
||||||
try {
|
try {
|
||||||
const {
|
const {
|
||||||
error,
|
error,
|
||||||
stdout,
|
stdout,
|
||||||
stderr } = await exec('npm outdated --prefix ' + this.prefix + " --json" + ' ' + this.name)
|
stderr } = await exec('npm outdated --prefix ' + this.prefix + " --json" + ' ' + this.name)
|
||||||
if (error){
|
if (error) throw new Error(stderr)
|
||||||
logger.warn(stderr)
|
if (Object.keys(JSON.parse(stdout)).length > 0) return true
|
||||||
return false
|
else return false
|
||||||
}
|
|
||||||
const status = JSON.parse(stdout)
|
|
||||||
if (status){
|
|
||||||
const outdated = (Object.keys(status).length > 0)
|
|
||||||
if (outdated){
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return false
|
logger.warn('npm outdated', this.name, 'from prefix', this.prefix, 'stderr:', error)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async getAuthor(): Promise<string | undefined>{
|
||||||
|
const {
|
||||||
|
error,
|
||||||
|
stdout,
|
||||||
|
stderr } = await exec('npm author ls --prefix ' + this.prefix + ' ' + this.name)
|
||||||
|
|
||||||
|
if(error){
|
||||||
|
logger.warn(stderr)
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
logger.info(stdout)
|
||||||
|
return stdout
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async getLatest(): Promise<string | undefined>{
|
||||||
|
const {
|
||||||
|
error,
|
||||||
|
stdout,
|
||||||
|
stderr } = await exec('npm view --prefix ' + this.prefix + ' ' + this.name + " version")
|
||||||
|
|
||||||
|
if(error){
|
||||||
|
logger.warn(stderr)
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
logger.info(stdout)
|
||||||
|
return stdout
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -254,21 +269,38 @@ export type GitStatus = FSStatus & {
|
|||||||
latest?: string
|
latest?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export class GitExtension extends FSExtension<GitStatus>{
|
export class GitExtension<Status extends GitStatus> extends FSExtension<Status>{
|
||||||
|
protected repo: git.SimpleGit
|
||||||
constructor(
|
constructor(
|
||||||
name:string,
|
name:string,
|
||||||
prefix:string,
|
prefix:string,
|
||||||
protected gitCloneURL: URL
|
protected gitCloneURL: string,
|
||||||
|
protected credentials?: [string, string]
|
||||||
){
|
){
|
||||||
super(name, version)
|
super(name, version)
|
||||||
}
|
}
|
||||||
|
|
||||||
public async status(): Promise<GitStatus>{
|
public async status(): Promise<Status>{
|
||||||
//TODO tomorrow
|
const fsStatus = await super.status()
|
||||||
|
|
||||||
|
return {
|
||||||
|
...fsStatus,
|
||||||
|
branch: 'wat',
|
||||||
|
remote: this.gitCloneURL,
|
||||||
|
latest: 'kek'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async install(): Promise<boolean> {
|
public async install(): Promise<boolean> {
|
||||||
return true
|
if (!this.isInstalled()){
|
||||||
|
if (this.credentials){
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user